Foxtable(狐表)用户栏目专家坐堂 → 陷入错误的死循环了


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

主题:陷入错误的死循环了

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


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
陷入错误的死循环了  发帖心情 Post By: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

这个问题如何解决呢?
 
窗口文件如下:
 
 
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:储量.rar

[此贴子已经被作者于2016/8/16 9:29:13编辑过]

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/16 10:57:00 [只看该作者]

去掉Systemidel代码还有没有问题。

上面Systemidel的代码花俏又耗资源,没有必要

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


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2016/8/16 11:01:00 [只看该作者]

我的主界面是这样的 :http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=87033&replyID=&skin=1

那我如何在状态栏显示当前窗口的名称呢?

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2016/8/16 11:03:00 [只看该作者]

取消Systemidel之后,状态栏一直显示第一个窗口的状态栏文字,不变了。

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


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2016/8/16 11:24:00 [只看该作者]

Hypen老师,不是项目Systemidel事件的问题,我删除了这个代码。

这个死循环同样存在。

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2016/8/16 11:45:00 [只看该作者]

算了,我把绘图代码删了。重写绘图的代码。

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


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/17 9:04:00 [只看该作者]

可能是有事件互相影响到了。上例子测试

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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()

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


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2016/8/17 9:45:00 [只看该作者]

和Build无关吧。
1楼的就只有1次。
这个系统登录窗口,第一次Build是生成一个临时表,第二次Build是在窗口表中引用这个临时表。

 回到顶部
总数 20 1 2 下一页