饼图点击事件

提示:一般用户可以忽略本节内容,因为Foxtable最新版已经改进了旧的图表功能,可以方便的设置样式去掉边框和背景,并且可以嵌入 到仪表控件中,且窗口也开始支持自动布局。所以如果嫌麻烦的话,可以直接嵌入图表里的饼图到卡片四的位置 ,会方便很多,参考:饼形图   图表事件  自动布局

主要是点击饼图后,对应的扇形可以离开圆心。难点是计算扇形离开后的位置,这里主要涉及到三角函数以及向量坐标的计算,数学如果都还给老师的建议直接使用原来的图表做饼图,最新版本的Foxtable添加了对应的图表事件:
http://www.foxtable.com/webhelp/topics/6014.htm  。

要想在点击饼图后可以让对应的扇形离开圆心,可以到ItemClick添加以下代码:

  1. If e.Item.name.startswith("产业分布"Then '只有是点击了饼图的形状才会处理后面的代码  
  2.     Dim gs As GaugeSector  
  3.     For Each st As Object In e.Gauge.CoverShapes  
  4.         If st.Name.EndsWith("_Cur"AndAlso st.Name <> e.Item.name Then '找出上一个点击的扇形恢复原状  
  5.             gs = st   
  6.             gs.Name = gs.Name.Replace("_Cur"""'去掉后缀  
  7.             '还原中心点坐标  
  8.             gs.Viewport.X = 0  
  9.             gs.Viewport.Y = 0  
  10.             gs.CenterRadius = 0 '还原中心点逻辑半径  
  11.             gs.Visible = True '显示扇形  
  12.             e.Sender.Gauges(5).CoverShapes(gs.Name & "_d").Visible = True '显示对应的小方块  
  13.             Exit For  
  14.         End If   
  15.     Next   
  16.     gs = e.Item  
  17.     Dim s As String = gs.Name.Replace("_Cur"""'获取原名称  
  18.     e.Sender.Gauges(5).CoverShapes(s & "_d").Visible = True '显示对应的小方块  
  19.     If gs.CenterRadius <> 0 Then '处于离开圆心状态  
  20.         '还原中心点坐标  
  21.         gs.Viewport.X = 0  
  22.         gs.Viewport.Y = 0  
  23.         gs.CenterRadius = 0 '还原中心点逻辑半径  
  24.         gs.Name = s '更改形状名称  
  25.     Else  
  26.         Dim a As Double = gs.StartAngle + gs.SweepAngle / 2 '计算角度其实角度+扇形中线角度  
  27.         '计算得出角度所在的坐标象限  
  28.         If a <= 90 Then  
  29.             a = 90 - a  
  30.         Else  
  31.             a = 360 - a + 90  
  32.         End If  
  33.           
  34.         a = a * Math.PI / 180 '角度转换为弧度  
  35.         '使用三角函数计算Sector中心点的向量值,也就是坐标值  
  36.         gs.Viewport.X = 50 * Math.Cos(a)  
  37.         gs.Viewport.Y = 50 * Math.Sin(a) * -1  
  38.         gs.CenterRadius = 10 '加大中心点的逻辑半径,突出显示扇形  
  39.         If gs.Name.EndsWith("_Cur") = False Then  
  40.             gs.Name = gs.Name & "_Cur" '给点击后的扇形名称添加上 "_Cur"后缀  
  41.         End If   
  42.     End If  
  43.     gs.Visible = True  
  44. End If  

如果要想让点击后的扇形闪烁起来,可以到TimerTick事件写代码:

  1. '闪烁显示当前点击的饼图扇形  
  2. Dim gs As GaugeSector  
  3. Dim rg As RadialGauge = gg.Gauges(9)  
  4. For Each st As Object In rg.CoverShapes '遍历所有形状  
  5.     If st.Name.EndsWith("_Cur"Then '如果这个形状以"_Cur"结束,说明就是当前点击的扇形  
  6.         gs = st  
  7.         gs.Visible = Not gs.Visible '反转显示状态  
  8.         Dim s As String = gs.Name.Replace("_Cur"""'获取原名称  
  9.         gg.Gauges(5).CoverShapes(s & "_d").Visible = Not gg.Gauges(5).CoverShapes(s & "_d").Visible ''反转显示标题小方块的状态  
  10.         Exit For  
  11.     End If   
  12. Next