以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  “必须为非负值并小于集合大小”是怎么回事?怎么解决?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=48597)

--  作者:苍风霁月
--  发布时间:2014/4/1 17:44:00
--  “必须为非负值并小于集合大小”是怎么回事?怎么解决?

我在BeforeSelRangeChangeAfterSelRangeChange设置事件,选择范围改变均没问题,在用了表事件,keydown后(空格),提示“必须为非负值并小于集合大小”,提示错误事件在BeforeSelRangeChangeAfterSelRangeChange中,这怎么解决?


--  作者:Bin
--  发布时间:2014/4/1 17:45:00
--  
建议您用这个方法:
http://www.foxtable.com/help/topics/1485.htm

先找出是哪一行出错,然后分析原因,搞不定,贴出代码,并告诉我们运行到哪一行出错,以及错误提示。  或者上例子.

--  作者:lsy
--  发布时间:2014/4/1 17:59:00
--  

BeforeSelRangeChangeAfterSelRangeChange之类的事件,前面都要加判断:

If e.Tabel.RowSel < 0 Orelse e.Tabel.ColSel < 0 Then

     Return

End If


--  作者:苍风霁月
--  发布时间:2014/4/2 8:20:00
--  

两个事件都加了判断的,还是会出现这种情况,before码如下:

If CurrentTable.RowSel < 0 OrElse CurrentTable.ColSel < 0 Then
     Return
End If

For Each r As Row In Tables("原始数据").GetCheckedRows
    r.Checked =False
Next

 

after代码如下:

 

If CurrentTable.RowSel < 0 OrElse CurrentTable.ColSel < 0 Then
    Return
End If
MessageBox.Show(1)
For i As Integer = CurrentTable.TopPosition To CurrentTable.BottomPosition
    CurrentTable.Rows(i).Checked = True
Next
MessageBox.Show(2)
With e.NewRange
    StatusBar.Message2 = CurrentTable.TopRow & "," & CurrentTable.LeftCol & " " & CurrentTable.BottomRow & "," & CurrentTable.RightCol & "  共选择" & cstr(CurrentTable.BottomPosition-CurrentTable.TopPosition+1) & "行"
End With


--  作者:有点甜
--  发布时间:2014/4/2 9:11:00
--  
 回复4楼,用代码测试正常。请做一个出错的例子发上来。
--  作者:苍风霁月
--  发布时间:2014/4/2 17:48:00
--  

如例子,先选择部分区域后,使用表快捷键ALT+S,然后再点击表,则会报错,请帮忙看看!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb


--  作者:有点甜
--  发布时间:2014/4/2 18:37:00
--  

 测试了一下,确实会报错。你把下面的代码放到AfterSelRangeChange事件里去吧

 

For Each r As Row In Tables("原始数据").GetCheckedRows
    r.Checked =False
Next

 

 

改成这样更好

 

Tables("原始数据").ClearCheckedRows