以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]索引超出范围。必须为非负值并小于集合大小。 参数名: index【已结】 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=83849) |
-- 作者:无我是天机 -- 发布时间:2016/4/18 16:28:00 -- [求助]索引超出范围。必须为非负值并小于集合大小。 参数名: index【已结】 设计了一个窗口,窗口上面放了个按钮,点击此按钮后对一张表数据进行计算,最后生成一张统计表。现在的问题是:窗口运行正常,点击按钮后也能正常弹出统计表。但是从统计表再点回该窗口的时候,就不停的报“索引超出范围。必须为非负值并小于集合大小。 参数名: index ”错误,从统计表点到其他界面又没这个问题。因为不停的报这个错误,也没办法看清楚报错界面上具体的那个事件引起的!请老师们指点一下,是否有其他办法调试? [此贴子已经被作者于2016/4/19 15:26:55编辑过]
|
-- 作者:大红袍 -- 发布时间:2016/4/18 16:31:00 -- 首先,升级到最新版。
报这个错一般是你的代码和系统的SystemIdle事件有冲突。
如果你窗口上有table控件,而且不是副本表,那么你窗口的属性->所有者表,就不能是这个表。 |
-- 作者:无我是天机 -- 发布时间:2016/4/18 17:50:00 -- 感谢红袍老师。现在确定是“报这个错一般是你的代码和系统的SystemIdle事件有冲突。”引起的,刚把该事件中的代码全部注销再测试,没有这个问题了。SystemIdle事件中以下代码有问题: Dim t As Table = CurrentTable If t.Current Is Nothing Then Return End If If SystemMenu = False AndAlso t.Cols(t.Colsel).IsNumeric Then Dim tgbn As RibbonMenu.ToggleButton = RibbonTabs("Common").Groups("Aggregate").Items("Aggregate") If tgbn.Pressed Then With CurrentTable Dim str1 As String = "" Dim tbn As RibbonMenu.ToggleButton Dim cbx As RibbonMenu.Checkbox Dim itm As RibbonMenu.RibbonItem For Each itm In RibbonTabs("Common").Groups("Aggregate").Items Select Case itm.Name Case "Count" cbx = itm If cbx.Checked Then Str1 = Str1 & "计数:" & t.Aggregate(AggregateEnum.Count, t.TopRow, t.LeftCol, t.BottomRow, t.RightCol) & " " End If Case "Sum" cbx = itm If cbx.Checked Then Str1 = Str1 & "累计:" & t.Aggregate(AggregateEnum.Sum, t.TopRow, t.LeftCol, t.BottomRow, t.RightCol) & " " End If Case "Average" cbx = itm If cbx.Checked Then Str1 = Str1 & "平均:" & t.Aggregate(AggregateEnum.Average, t.TopRow, t.LeftCol, t.BottomRow, t.RightCol) & " " End If Case "Max" cbx = itm If cbx.Checked Then Str1 = Str1 & "最大:" & t.Aggregate(AggregateEnum.Max, t.TopRow, t.LeftCol, t.BottomRow, t.RightCol) & " " End If Case "Min" cbx = itm If cbx.Checked Then Str1 = Str1 & "最小:" & t.Aggregate(AggregateEnum.Min, t.TopRow, t.LeftCol, t.BottomRow, t.RightCol) & " " End If Case "Var" tbn = itm If tbn.Pressed Then Str1 = Str1 & "标准差:" & t.Aggregate(AggregateEnum.Std, t.TopRow, t.LeftCol, t.BottomRow, t.RightCol) & " " End If Case "VarPop" tbn = itm If tbn.Pressed Then Str1 = Str1 & "总体标准差:" & t.Aggregate(AggregateEnum.StdPop, t.TopRow, t.LeftCol, t.BottomRow, t.RightCol) & " " End If Case "Std" tbn = itm If tbn.Pressed Then Str1 = Str1 & "方差:" & t.Aggregate(AggregateEnum.Var, t.TopRow, t.LeftCol, t.BottomRow, t.RightCol) & " " End If Case "StdPop" tbn = itm If tbn.Pressed Then Str1 = Str1 & "总体方差:" & t.Aggregate(AggregateEnum.VarPop, t.TopRow, t.LeftCol, t.BottomRow, t.RightCol) & " " End If End Select Next StatusBar.Message3 = Str1 End With End If End If [此贴子已经被作者于2016/4/18 17:51:35编辑过]
|
-- 作者:大红袍 -- 发布时间:2016/4/18 17:53:00 -- 你尝试多加一些判断
Dim t As Table = CurrentTable If SystemMenu = False AndAlso t.Current IsNot Nothing AndAlso t.Cols(t.Colsel).IsNumeric Then
实在不行,做个对应的例子发上来看看。 |