Foxtable(狐表)用户栏目专家坐堂 → 饼图图系编号和数据点编号问题


  共有5232人关注过本帖树形打印复制链接

主题:饼图图系编号和数据点编号问题

帅哥哟,离线,有人找我吗?
onlinech
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:105 积分:1193 威望:0 精华:0 注册:2017/6/10 10:52:00
饼图图系编号和数据点编号问题  发帖心情 Post By:2022/12/12 9:14:00 [只看该作者]

1、如何实现鼠标移动某个图例时,动态实时显示此图例的内容,我现在使用的messagebox.show,每次移动都要“确认”一下,太麻烦了
2、不要显示是第几个图系,而是显示这个图系的名称,例:9号场地,1785620
3、图和图例所在位置的颜色可以修改
4、右侧图例可以多显示几行,不要分成2列

图片点击可在新窗口打开查看此主题相关图片如下:搜狗截图20221212090741.png
图片点击可在新窗口打开查看

代码:
Dim Chart As WinForm.Chart '定义一个图表变量
Dim Series As WinForm.ChartSeries '定义一个图系变量
Dim t As Table = Tables("统计表4") '定义一个变量t引用数据表--------------
Dim sm As Integer = t.Compute("Sum(净重)") '计算总数量
Chart = Forms("窗口2").Controls("Chart1") ' 引用窗口中的图表--------------
Chart.VisualEffect = True '加上这一行,让你的图表更漂亮
Chart.ChartType = ChartTypeEnum.Pie '图表1类型改为Bar(条形)
For Each r As Row In t.Rows
    Series = Chart.SeriesList.Add() '增加一个图系
    Series.Length = 1 '一个系列只能包括一个值
'    Series.Text = r("发货单位") & "(" & r("净重") & ")" '设置图系的标题
     Series.Text = r("发货单位") '设置图系的标题   
    Series.Y(0) = r("净重") '指定值
    Series.DataLabelText = Math.Round(r("净重") * 100 / sm, 2) & "%" '计算百分比
Next
Chart.LegendVisible = True '显示图列
Chart.LegendCompass = CompassEnum.East '图列显示在东方(右方)

事件MouseMove:
Dim s As Integer '定义存储图系编号的变量
Dim p As Integer '定义存储数据点编号的变量
Dim Chart As WinForm.Chart = Forms("窗口2").Controls("Chart1") '获得Chart对象的引用------------
If Chart.CoordToDataIndex(e.x, e.y , s , p) Then '如果鼠标位置存在有效的图序和数据点
    Dim Series As WinForm.ChartSeries = Chart.SeriesList(s) '获得鼠标位置的图序
    Dim msg As String
    msg = "单击的是第" & (s + 1) & "个图系,该点的值为 " & Series.Y(p)
    Messagebox.Show(msg, "提示")
End If

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/12 9:19:00 [只看该作者]

1、把messagebox的代码改为自己需要显示的其它功能
2、根据第几个到表格里取对应的行即可,比如第4个图系,就是第4行的数据
4、无法控制

 回到顶部
帅哥哟,离线,有人找我吗?
onlinech
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:105 积分:1193 威望:0 精华:0 注册:2017/6/10 10:52:00
  发帖心情 Post By:2022/12/20 10:34:00 [只看该作者]

可能没表述清楚,我是想鼠标移动到某个图例时就显示这个图例的相关信息,而不是用鼠标点击的方式

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/20 10:51:00 [只看该作者]

一样的用法,代码放到鼠标移动事件即可

 回到顶部
帅哥哟,离线,有人找我吗?
onlinech
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:105 积分:1193 威望:0 精华:0 注册:2017/6/10 10:52:00
  发帖心情 Post By:2022/12/20 11:32:00 [只看该作者]

放在MouseMove事件中,还是要点击“确认”按钮后,才能再显示其它图例的信息
我是想鼠标移动到哪个图例就显示哪个图例的(动态),如果超过这个饼形图表,就不显示,不再手动去点击“确认”按钮

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/20 11:36:00 [只看该作者]

这种直接使用TooltipText就行了:http://www.foxtable.com/webhelp/topics/0982.htm

 回到顶部
帅哥哟,离线,有人找我吗?
onlinech
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:105 积分:1193 威望:0 精华:0 注册:2017/6/10 10:52:00
  发帖心情 Post By:2022/12/21 12:28:00 [只看该作者]

在没有图例的情况下,鼠标移动到图表的范围会报错,如何不显示报错信息,或是显示一段自定义文字呢?
MouseMove代码:

Dim s As Integer '定义存储图系编号的变量

Dim p As Integer '定义存储数据点编号的变量

Dim Chart As WinForm.Chart = Forms("当日实时").Controls("Chart2") '获得Chart对象的引用------------

If Chart.CoordToDataIndex(e.x, e.y , s , p) Then '如果鼠标位置存在有效的图序和数据点

    Dim Series As WinForm.ChartSeries = Chart.SeriesList(s) '获得鼠标位置的图序

    Series.TooltipText = "发货单位:" & DataTables("发货单位统计").DataRows(s)("发货单位") & vbcrlf & "重量:" & Series.Y(p) / 1000 & "吨"

Else

    Series.TooltipText = "今日无数据"

End If


此主题相关图片如下:搜狗截图20221221075825.png
按此在新窗口浏览图片



此主题相关图片如下:搜狗截图20221221125506.png
按此在新窗口浏览图片
当这个统计出来的表无任何数据时,才会报错。

[此贴子已经被作者于2022/12/21 13:03:51编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/21 13:33:00 [只看该作者]

If Chart.CoordToDataIndex(e.x, e.y , s , p) andalso Tables("发货单位统计").Rows.count > 0

 回到顶部
帅哥哟,离线,有人找我吗?
onlinech
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:105 积分:1193 威望:0 精华:0 注册:2017/6/10 10:52:00
  发帖心情 Post By:2022/12/21 17:59:00 [只看该作者]

代码修改如下:
Dim s As Integer 
Dim p As Integer 
Dim Chart As WinForm.Chart = Forms("当日实时").Controls("Chart2") 
MessageBox.Show("1")
If Chart.CoordToDataIndex(e.x, e.y , s , p) AndAlso DataTables("发货单位统计").dataRows.count > 0 Then '如果鼠标位置存在有效的图序和数据点,且表不为空
    MessageBox.Show("2")
    Dim Series As WinForm.ChartSeries = Chart.SeriesList(s) 
    Series.TooltipText = "发货单位:" & DataTables("发货单位统计").DataRows(s)("发货单位") & vbcrlf & "重量:" & Series.Y(p) / 1000 & "吨"
Else
    MessageBox.Show("3")
End If

还是报一样的错,只能看断点1,断点2和3都没执行

 回到顶部
帅哥哟,离线,有人找我吗?
onlinech
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:105 积分:1193 威望:0 精华:0 注册:2017/6/10 10:52:00
  发帖心情 Post By:2022/12/22 8:21:00 [只看该作者]

已解决

If Tables("发货单位统计").Rows.count > 0 AndAlso Chart.CoordToDataIndex(e.x, e.y , s , p) Then

谢谢

 回到顶部