以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]图表X轴字符获取  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=194664)

--  作者:azlm100
--  发布时间:2025/1/3 14:22:00
--  [求助]图表X轴字符获取
图片点击可在新窗口打开查看

各位大神,想请教一下。怎么获取鼠标点击上方图表的柱状的X轴的字符。{技术部,品质管理部,业务部,制造部}这4个字符。

If c1.CoordToDataIndex(e.x, e.y ,s ,p) Then \'如果鼠标位置存在有效的图序和数据点
    Dim Seriess As WinForm.ChartSeries = c1.SeriesList(s) \'获得鼠标位置的图序
    msg  = p
End If

这个只能获取点位,1,2,3,4这种。




[此贴子已经被作者于2025/1/3 14:22:55编辑过]

--  作者:有点蓝
--  发布时间:2025/1/3 14:42:00
--  
按顺序取字符不就行了,1=技术部,2=品质管理部
--  作者:azlm100
--  发布时间:2025/1/3 14:56:00
--  
这个部的少,我就是用的这种方式,但是制造部下面有差不多20个柱状。。。怎么弄。
--  作者:有点蓝
--  发布时间:2025/1/3 15:32:00
--  
生成图表的代码发上来
--  作者:azlm100
--  发布时间:2025/1/4 8:05:00
--  
Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
If c1.CoordToDataIndex(e.x, e.y ,s ,p) Then \'如果鼠标位置存在有效的图序和数据点
    Dim Seriess As WinForm.ChartSeries = c1.SeriesList(s) \'获得鼠标位置的图序
    msg  = p
End If
Dim cus As String
Dim cs As String
Select Case msg
    Case 0
        cus = "技术部"
    Case 1
        cus = "品质管理部"
    Case 2
        cus = "业务部"
    Case 3
        cus = "制造部"
End Select
e.Form.Controls("Label6").text = cus        \'获取鼠标点的部门

    Dim lst4 As List(Of String) = dtt.GetValues("deptname2", "topdeptnamexx = \'" & cus & "\' and deptname2 Is not null ") \'获得课名称集合
    Chart = e.Form.Controls("Chart4")  \' 引用窗口中的图表
    Chart.VisualEffect = True \'加上这一行,让你的图表更漂亮
    Chart.ChartType = ChartTypeEnum.Bar \'设置图表类型
    Chart.SeriesList.Clear() \'清除图表原来的图系
    chart.AxisX.ClearValueLabel
    chart.AxisY.ClearValueLabel
    Series = Chart.SeriesList.Add() \'增加一个图系
    Dim d As Integer = 0
    Series.Length = lst4.Count \'图系的数据点数等于表的行数
    Series.Text = "计划加班总数"
    For k As Integer = 0 To lst4.Count - 1 \'指定每个数据点的位置
        Dim Averageovertime As Integer = 0
        Dim dhi As Integer = 0
        Series.X(k) = k \'指定水平坐标
        Dim drs As List(of DataRow)
        drs = dtt.Select("[deptname2] = \'" & lst4(k) & "\'and [bd] = \'" & dt3 & "\'")
        If drs.Count > 0 Then
            For Each  dttr As  DataRow In drs
                Averageovertime  = dttr("otsum") * dttr("people") +  Averageovertime   \'统计出公司总计划加班总数
            Next
            If Averageovertime > 0 Then
                Series.Y(k) = CInt(Format(Averageovertime, "0"))
                If Averageovertime > d Then
                    d = Averageovertime
                End If
            Else
                Series.Y(k) = 0
            End If
        Else
            Series.Y(k) = 0
        End If
        Chart.AxisX.SetValueLabel(k, lst4(k)) \'指定字符表示
    Next
    Series.TooltipText = "{#YVAL}"
    Series.DataLabelText = "{#YVAL}"
    series.DataLabelForeColor = Color.blue
    Series.DataLabelCompass =LabelCompassEnum.North



这里只有4个部,还能用这种转换方式来获取点击部门字符来统计人数信息。
后面到了课就有20几个了。。。

--  作者:有点蓝
--  发布时间:2025/1/4 9:51:00
--  
5楼是点击1楼的图后生成的子图吧。我要的是1楼的图表生成的代码!

--  作者:有点蓝
--  发布时间:2025/1/4 10:22:00
--  
如果技术部这些内容也是使用GetValues获取的,那么一样从GetValues里按索引取内容即可
--  作者:azlm100
--  发布时间:2025/1/4 10:59:00
--  
这边都是使用GetValues来获取字符的,我现在是需要鼠标点击最下面第三个图表时继续出第四个图表,第三个图X轴太多点,而且点击第二个图时第三个图都会不同。所以无法继续使用定位来转换X轴的字符。如果可以通过鼠标几点柱状来直接获取到该柱状的X轴字符是最简单了。不过查了好久帮助好像没有类似的代码。


--  作者:azlm100
--  发布时间:2025/1/4 11:00:00
--  
图片点击可在新窗口打开查看
--  作者:有点蓝
--  发布时间:2025/1/4 11:10:00
--  
都是使用GetValues来获取字符】那全部一样从GetValues里按索引取值就行了