以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  删除行出现的奇怪错误  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=128270)

--  作者:我要高飞
--  发布时间:2018/12/2 19:43:00
--  删除行出现的奇怪错误
我在发票表的beforeselchange事件加了一下代码,是为了防止开票窗口打开后,发票表的当前行被改变。

If forms("开票").Opened=True And e.Table.current.DataRow.Rowstate<>dataRowstate.unchanged Then
    e.Cancel=True
End If

上面的加入后,开票窗口没有打开的情况下,删除发票表的一行记录时,会报以下错误。上述代码在开票窗口未打开的情况下,应该是不会执行的,就算执行也不影响删除动作。删除动作为未写任何代码,就是使用的是系统自带的删除

.NET Framework 版本:2.0.50727.8937
Foxtable 版本:2018.10.9.1
错误所在事件:SystemIdle
详细错误信息:
索引超出范围。必须为非负值并小于集合大小。
参数名: index


把    e.Cancel=True改成messagebox.show,也报错:
.NET Framework 版本:2.0.50727.8937
Foxtable 版本:2018.10.9.1
错误所在事件:发票表,BeforeSelChange
详细错误信息:
未将对象引用设置到对象的实例。

[此贴子已经被作者于2018/12/2 19:47:35编辑过]

--  作者:有点甜
--  发布时间:2018/12/2 20:36:00
--  

试试改成这样

 

If e.NewRange.RowSel >= 0 AndAlso e.OldRange.RowSel <> e.NewRange.RowSel  Then
    If forms("开票").Opened=True And e.Table.current.DataRow.Rowstate<>dataRowstate.unchanged Then
        e.Cancel=True
    End If
End If