以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 陷入错误的死循环了 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=89128) |
||||
-- 作者:天若千颖 -- 发布时间:2016/8/16 9:19:00 -- 陷入错误的死循环了 昨天在窗口的AfterLoad中加入了如下代码: \'预先加载最新评估储量图
Dim g As New GroupTableBuilder("临时表", DataTables("总储量明细表"))
g.Groups.AddDef("勘探区块")
g.Totals.AddDef("总储量_1P")
g.Totals.AddDef("总储量_2P")
g.Totals.AddDef("总储量_3P")
g.Totals.AddDef("总储量_1C")
g.Totals.AddDef("总储量_2C")
g.Totals.AddDef("总储量_3C")
g.Filter = "[版本号]= \'2015.08.25\'"
g.Build()
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轴的绑定列
Series.TooltipText = "Y = {#YVAL}" \'动态显示X/Y值
End If
Next
\'-----------------------个性化图表------------------------
Chart.AxisX.AnnoRotation = - 90 \'X轴标示逆时针旋转90度
Chart.LegendVisible = True \'显示图列
Chart.LegendCompass= CompassEnum.South \'图列显示在南方(底端)
Series.DataLabelCompass =LabelCompassEnum.North \'Y值显示在柱子的下面
Chart.AxisX.GridMajorVisible = False \'隐藏X轴的网格线
Chart.AxisY.GridMajorVisible = False \'隐藏Y轴的网格线
Chart.HeaderText= "最新储量评估结果(2015年8月25日)" \'显示图名 当预览窗口的时候,一直弹出错误提示,提示信息为:未将对象引用到对象的实例;错误窗口一直弹出,没法关闭。
详细信息大概是和SystemIdle相关的。
我的项目的Systemidel中代码为:
If Forms.activeform IsNot Nothing Then
StatusBar.Message1 = "当前窗口:" & Forms.Activeform.name
Else
StatusBar.Message1 = ""
End If 这个问题如何解决呢?
窗口文件如下:
[此贴子已经被作者于2016/8/16 9:29:13编辑过]
|
||||
-- 作者:Hyphen -- 发布时间:2016/8/16 10:57:00 -- 去掉Systemidel代码还有没有问题。 上面Systemidel的代码花俏又耗资源,没有必要
|
||||
-- 作者:天若千颖 -- 发布时间:2016/8/16 11:01:00 -- 我的主界面是这样的 :http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=87033&replyID=&skin=1 那我如何在状态栏显示当前窗口的名称呢?
|
||||
-- 作者:天若千颖 -- 发布时间:2016/8/16 11:03:00 -- 取消Systemidel之后,状态栏一直显示第一个窗口的状态栏文字,不变了。 |
||||
-- 作者:天若千颖 -- 发布时间:2016/8/16 11:24:00 -- Hypen老师,不是项目Systemidel事件的问题,我删除了这个代码。 这个死循环同样存在。
|
||||
-- 作者:天若千颖 -- 发布时间:2016/8/16 11:45:00 -- 算了,我把绘图代码删了。重写绘图的代码。 |
||||
-- 作者:天若千颖 -- 发布时间:2016/8/17 8:38:00 -- 不知为何,这一段代码也会出现同样的错误,窗口打开时会弹出无数个错误提示,除了关闭进程之外,完全无法终止。 是这样的,我有一个表,两列,登录用户名和登录频次,用户每登录一次,频次为1. 然后生成一个临时表统计总的登录次数,并利用临时表生成一个柱状图。 代码放在窗口的AfterLoad中。 为什么会出现这种错误的死循环呢?
Dim g As New GroupTableBuilder("统计表8", DataTables("系统日志表")) g.Groups.AddDef("登录用户") g.Totals.AddDef("登录频次") g.Build() Forms("系统登录日志窗口").Controls("Table1").Table.DataSource = g.BuildDataSource() \'绘图代码 Dim Chart As WinForm.Chart \'定义一个图表变量 Dim Series As WinForm.ChartSeries \'定义一个图系变量 Dim t As Table = Tables("统计表8") \'定义一个变量t引用数据表 Chart= Forms("系统登录日志窗口").Controls("Chart1") \' 引用窗口中的图表 Chart.SeriesList.Clear() \'清除图表原来的图系 Chart.AxisX.ClearValueLabel Series = Chart.SeriesList.Add() \'增加一个图系 Chart.ChartType = ChartTypeEnum.Bar \'图表类型该为Bar(条形) Series.Length = t.Rows.Count \'设置图系的长度 For i As Integer = 0 To t.Rows.Count - 1 \'指定每个数据点的位置 Series.X(i) = i \'指定水平坐标 Series.Y(i) = t.Rows(i)("登录频次") \'指定垂直坐标 Chart.AxisX.SetValueLabel(i, t.Rows(i)("登录用户")) \'指定字符表示 Series.DataLabelText = "{#YVAL}" \'柱子上显示Y值 Series.DataLabelCompass =LabelCompassEnum.North \'Y值显示在柱子的下面 Next Chart.AxisX.AnnoWithLabels = True \'启用字符标示 \'图片美化 Chart.AxisX.AnnoRotation = - 90 \'X轴标示逆时针旋转90度 Chart.VisualEffect = False \'加上这一行,让图表更漂亮 Chart.AxisX.GridMajorVisible = False \'隐藏X轴的网格线 Chart.AxisY.GridMajorVisible = False \'隐藏Y轴的网格线 Chart.LegendVisible = False \'显示图列 Chart.LegendCompass= CompassEnum.South \'图列显示在南方(底端) |
||||
-- 作者:Hyphen -- 发布时间:2016/8/17 9:04:00 -- 可能是有事件互相影响到了。上例子测试 |
||||
-- 作者:大红袍 -- 发布时间:2016/8/17 9:16:00 -- 不要build两次啊
Dim g As New GroupTableBuilder("统计表8", DataTables("系统日志表"))
g.Groups.AddDef("登录用户")
g.Totals.AddDef("登录频次")
Forms("系统登录日志窗口").Controls("Table1").Table.DataSource = g.BuildDataSource()
|
||||
-- 作者:天若千颖 -- 发布时间:2016/8/17 9:45:00 -- 和Build无关吧。 1楼的就只有1次。 这个系统登录窗口,第一次Build是生成一个临时表,第二次Build是在窗口表中引用这个临时表。
|