StartEdit

开始编辑的时候执行。

e参数属性:

Table:       准备编辑的表
Row:         准备编辑的行
Col:         准备编辑的列
IsFocusCell: 逻辑型,是否是焦点单元格
Cancel:      逻辑型,默认为False,设为True取消编辑。
Continue:     逻辑型,默认为True,设置为False取消后续操作 ,后续单元格不会再触发StartEdit事件。

StartEdit事件的使用方法和PrepareEdit事件完全一样,实际上大部分PrepareEdit能完成的工作,都可以用StartEdit完成。
但是两者有细微差别;PrepareEdit事件的代码,一进入单元格就会执行,为可能开始的编辑工作做准备,所以执行效率会差一些,因为并不是每次进入单元格都是需要编辑的;而StartEdit只是在真正开始编辑的时候执行,效率会稍微好一点;不过这种效率的差别,我们并不会明显感觉得到。
此外用于设置列表项目的代码,最好不要用在StartEdit事件中,否则你选择某一单元格的时候,可能不会出现下拉箭头按钮,因为此时StartEdit事件并没有执行,列表项目当然也就没有准备好。
千万不要在PrepareEdit事件显示Messagebox这样的对话框,因为每次进入单元格就会出现提示,这样会导致死循环的出现;在StartEdit事件中显示对话框就 没有这个问题,因为此时只有用户真正做出编辑动作的时候,对话框才会显示。

示例

假定消费表中还有一个折扣列,我们希望只有经理级别的用户才能编辑该列的数据,如果其他用户试图编辑该列,则给出明确拒绝的提示,为此可在该表的StartEdit事件中输入代码:

If e.Col.Name = "折扣" AndAlso User.Group <> "经理" Then
    e.Cancel =
True '取消编辑
    Messagebox.Show(
"只有经理才能打折!","提示",MessageBoxButtons.OK, MessageBoxIcon.Information)
End
If

上面的代码如果设置在PrepareEdit事件中,非经理级用户一旦选择折扣列,将不停地出现提示窗口,使得你再也回不到正常的操作界面,你只能借助Foxtable提供的灾难恢复了。
而设置在StartEdit事件中,就不会有任何问题。

如果你在折扣列选定了多个单元格,然后进行剪贴或删除操作,那么上述提示可能会出现多次,为避免这种情况,可以将Continue参数设置为False,这样只要有一行不符合条件,后续操作都会终止,不会再触发StartEdit事件:

If e.Col.Name = "折扣" AndAlso User.Group <> "经理" Then
    e.Cancel =
True '取消编辑
    e.
Continue = False '取消后续同类操作
    Messagebox.Show("只有经理才能打折!","提示",MessageBoxButtons.OK, MessageBoxIcon.Information)
End
If

注意: 将Contine设置为False,只是取消后续同类操作,而不会取消本次操作,所以上述代码还需要将Cancel设置为True。

示例二

对于文件列和图片列,如果希望禁止用户编辑单元格内容,可以将StartEdit事件代码设置为:

If e.Col.name = "列名" Then
   
e.Cancel = True
End
If

你也许会问,设置在PrepareEdit事件中不行吗? 当然可以,但是二者是有差别的:在PrepareEdit事件中设置,会导致单元格右边的按钮"..."无效;而在StartEdit设置,此按钮依然有效,你可以继续通过这个按钮增加、插入或删除文件,只是不能直接修改单元格内容。

 


本页地址:http://www.foxtable.com/webhelp/topics/0615.htm