图表事件

本节的可以参考CaseStudy目录下的文件“图表事件.Table”

Chart控件现在可以响应事件,让你的图表活起来。

Chart支持的事件有:

事件 触发条件 说明
MouseClik 单击某个图系或数据点后执行 e参数属性
  • Sender

    触发事件的控件
     
  • Form

    触发事件的黄口
     
  • SeriesIndex

    整数型,图系索引位置
     
  • PointsIndex

    整数型,数据点索引位置
     
  • X

    鼠标水平位置
     
  • Y

    鼠标垂直位置
     
  • Button

    MouseButtons型枚举,用于判断按下的是哪一个按钮,可能的值有:
    Left:   鼠标左按钮。
    Middle: 鼠标中按钮。
    Right:  鼠标右按钮。

 

MouseDoubleClik 双击某个图系或数据点后执行
MouseHover 鼠标悬停在某个图系或数据点后执行
MouseDown 在某个图系或数据点上按下鼠标后执行
MouseUp 在某个图系或数据点上松开鼠标后执行
MouseMove 鼠标经过某个图系或数据点时执行
ShowTooltip 显示提示信息的时候执行 e参数属性
  • Sender

    触发事件的控件
     
  • Form

    触发事件的黄口
     
  • SeriesIndex

    整数型,图系索引位置
     
  • PointsIndex

    整数型,数据点索引位置
     
  • ToolTipText

    用于设置要提示的信息

 

示例一

例如有个饼图,希望单击某个扇形,能使其离开或回到圆心:

 

要实现上述要求,只需在Click事件加上代码:

If e.SeriesIndex >= 0 Then
   
Dim chart As WinForm.Chart = e.Sender
   
Dim series As WinForm.ChartSeries = chart.SeriesList(e.SeriesIndex)
   
If series.Offset = 0 Then
        series.Offset = 30
   
Else
        series.Offset = 0
   
End If
End
If

示例二

这次复杂点,假定有一个数据表如下:

希望根据这个数据表生成一个条形图,要求:

1、单击某个条形图时,数据表的焦点能自动跳转到对应的单元格

2、鼠标悬停在某个条形图上的时候,能显示提示信息,并判断用户是否按下Ctrl键,并据此显示不同的提示信息:

不按Ctrl键悬停:

按Ctrl键悬停:

设计步骤

1、在窗口的AfterLoad事件加上代码:

Dim Chart As WinForm.Chart '定义一个图表变量
Dim
Series As WinForm.ChartSeries '定义一个图系变量
Dim
t As Table = Tables("技术分析") '定义一个变量t引用数据表
Chart = e.Form.Controls(
"Chart1") ' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar
'图表类型改为Bar(条形)
Chart.DataSource =
"技术分析" '设置绑定表
Chart.SeriesList.Clear()
'清除图表原来的图系
For
Each c As Col In t.Cols
   
If c.Name <> "技术" Then
        Series = Chart.SeriesList.Add()
'增加一个图系
        Series.Text = c.Name
'设置图系的标题
        Series.X.DataField =
"技术" 'X轴绑定到产品列
        Series.Y.DataField = c.Name
'设置Y轴的绑定列
   
End If
Next

Chart.AxisY.Min = 0
'Y轴最小值
Chart.VisualEffect =
True '加上这一行,让你的图表更漂亮
Chart.LegendVisible =
True '显示图列
Chart.LegendCompass = CompassEnum.South
'图列显示在南方(底端)
Chart.Style.BackColor = Color.White
'控件背景颜色
Chart.Style.Border.BorderStyle = C1Chart.BorderStyleEnum.None
'去掉控件边框
Chart.ChartAreaStyle.Border.BorderStyle = C1Chart.BorderStyleEnum.None
'去掉图表边框

2、将Chart控件的ShowToolTip事件代码设置为:

Dim cht As WinForm.Chart = e.Sender
If e.SeriesIndex >= 0 AndAlso e.PointIndex >= 0 Then '如多是有效的数据点
   
Dim info As String
   
If ModifierKey = Keys.Control Then '如果按下了Ctrl
       
Dim r As Row = Tables("技术分析").rows(e.PointIndex) '在绑定列的时候,e.PointsIndex等于行号
        info = r(
"技术")
       
For Each cl As Col In Tables("技术分析").Cols
           
If cl.Name <> "技术" Then
                info = info & vbCrLf & cl.Name &
"" & r(cl.Name)
           
End If
       
Next
   
Else
       
Dim nm As String = cht.SeriesList(e.SeriesIndex).Y.DataField '获取图系对应的选手名
        info =
"姓名:" & nm
       
For Each r As Row In Tables("技术分析").Rows
            info = info & vbCrLf & r(
"技术") & "" & r(nm)
       
Next
   
End If
   
If info > "" Then
      e.ToolTipText = info
   
End If
End
If

3、将Chart控件的MoueClick事件代码设置为:

Dim cht As WinForm.Chart = e.Sender
If
e.SeriesIndex >= 0 AndAlso e.PointsIndex >= 0 Then '如多点击了有效的数据点
   
Dim nm As String = cht.SeriesList(e.SeriesIndex).Y.DataField '获取图系对应的选手名,也就是列名
   
Dim c As Integer = Tables("技术分析").Cols(nm).Index
    Tables(
"技术分析").Select(e.PointsIndex, c) '在绑定表的时候,e.PointsIndex等于行号
End
If

示例三

如果不希望悬停显示提示信息,而是希望按下鼠标的的时候显示,且按下鼠标左键和右键能分别显示不同的信息

可以删除ShowToolTip和MoueClick事件中的代码,然后将MouseDown事件代码设置为:

Dim cht As WinForm.Chart = e.Sender
cht.HideToolTip()
'隐藏之前的提示信息
If
e.SeriesIndex >= 0 AndAlso e.PointsIndex >= 0 Then '如多点击了有效的数据点
   
Dim info As String
   
If e.Button = MouseButtons.Left Then '如果按下的是鼠标坐标
       
Dim r As Row = Tables("技术分析").rows(e.PointsIndex) '在绑定表的时候,e.PointsIndex等于行号
        info = r(
"技术")
       
For Each cl As Col In Tables("技术分析").Cols
           
If cl.Name <> "技术" Then
                info = info & vbCrLf & cl.Name &
"" & r(cl.Name)
           
End If
       
Next
   
ElseIf e.Button = MouseButtons.Right Then '如果按下的是鼠标右键
       
Dim nm As String = cht.SeriesList(e.SeriesIndex).Y.DataField '获取图系对应的选手名
        info =
"姓名:" & nm
       
For Each r As Row In Tables("技术分析").Rows
            info = info & vbCrLf & r(
"技术") & "" & r(nm)
       
Next
   
End If
   
If info > "" Then
        cht.ShowToolTip(info, e.X, e.Y, 5000)
'在鼠标位置显示信息,5秒后自动关闭
   
End If
End
If

感觉这样更方便点。

 


本页地址:http://www.foxtable.com/webhelp/topics/6014.htm