Foxtable(狐表)用户栏目专家坐堂 → “必须为非负值并小于集合大小”是怎么回事?怎么解决?


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

主题:“必须为非负值并小于集合大小”是怎么回事?怎么解决?

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


加好友 发短信
等级:三尾狐 帖子:704 积分:7058 威望:0 精华:0 注册:2012/11/4 23:10:00
“必须为非负值并小于集合大小”是怎么回事?怎么解决?  发帖心情 Post By:2014/4/1 17:44:00 [只看该作者]

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


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/4/1 17:45:00 [只看该作者]

建议您用这个方法:
http://www.foxtable.com/help/topics/1485.htm

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

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/4/1 17:59:00 [只看该作者]

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

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

     Return

End If


 回到顶部
帅哥哟,离线,有人找我吗?
苍风霁月
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:704 积分:7058 威望:0 精华:0 注册:2012/11/4 23:10:00
  发帖心情 Post By: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


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/2 9:11:00 [只看该作者]

 回复4楼,用代码测试正常。请做一个出错的例子发上来。

 回到顶部
帅哥哟,离线,有人找我吗?
苍风霁月
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:704 积分:7058 威望:0 精华:0 注册:2012/11/4 23:10:00
  发帖心情 Post By:2014/4/2 17:48:00 [只看该作者]

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

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


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/2 18:37:00 [只看该作者]

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

 

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

 

 

改成这样更好

 

Tables("原始数据").ClearCheckedRows

 


 回到顶部