leikaihua 发表于 2014-11-10 18:11:00

将要进入编辑

在 BeforeEditMode事件中:如何使用户不进入编辑。

leikaihua 发表于 2014-11-10 18:34:00

也就是说 比如:用户使用 键盘或鼠标将要编辑某个单元格,此时我发现该单元内容并不允许编辑,如果使他退出?

leikaihua 发表于 2014-11-11 17:57:00

可能还是不够清楚:
如:当我用鼠标、或键盘输入字符时。现在已经通过BeforeEditMode事件拦截;发现该单元格的内容已经不允许用户改变,这时如何使用户退出编辑模式(这当然是瞬间了)。 如取消编辑?

iceman 发表于 2014-11-11 18:38:00

回复 3楼leikaihua的帖子

很抱歉,让您久等了。
退出编辑模式可以通过 EditMode 设置:

Me.fpSpread1.EditMode = False

leikaihua 发表于 2014-11-12 11:59:00

回复 4楼iceman的帖子

多谢版主回答:   当 EditMode = false 的时候,虽然鼠标不能进入编辑。

但是按下键盘的字符仍旧可以进行编辑单元格的内容。

leikaihua 发表于 2014-11-12 12:05:00

目标就是:拦截用户通过任何方式在某个单元格输入数据,然后不允许他做任何编辑。

就如同:用户将要编辑某个单元格,程序内部发现该单元格不允许编辑,然后使用户不允许通过任何方式再改变单元格内容。

iceman 发表于 2014-11-12 17:19:00

回复 6楼leikaihua的帖子

可以设置 Lock 属性为 true 锁定这个单元格,代码如下:

Me.fpSpread1.Row = 1
Me.fpSpread1.Col = 1

Me.fpSpread1.Lock = True

leikaihua 发表于 2014-11-12 20:28:00

回复 7楼iceman的帖子

结合 锁定 和 退出编辑 虽然可以勉强做到,但是实际根本不行。

因为 BeforeEditMode事件发生后,然后对传递来的单元格锁定和退出编辑。虽然此时该格已经锁定和编辑,但是仍旧有第一次的输入被输入进去了。

也就是说,锁定慢了一步。锁定是在BeforeEditMode发生之后才锁定了。

您可以尝试一下:如果 BeforeEditMode后锁定,虽然鼠标无法编辑,但是按下 键盘的字符或汉字,还是可以输入一次字符。第二次就不行了(因为已经锁定了)。。。

所以呢:这样不行。我就想问一下 难道不能对该事件返回假 让它如同没有发生吗?SPr 这个都没有考虑?还是?

iceman 发表于 2014-11-13 13:49:00

回复 8楼leikaihua的帖子

可以设置事件中的参数 Cancel 为 true 来实现:

Private Sub fpSpread1_BeforeEditMode(ByVal Col As Long, ByVal Row As Long, ByVal UserAction As FPSpreadADO.BeforeEditModeActionConstants, CursorPos As Variant, Cancel As Variant)

Me.fpSpread1.EditMode = False
Me.fpSpread1.Row = Row
Me.fpSpread1.Col = Col

Me.fpSpread1.Lock = True

Cancel = True

End Sub

leikaihua 发表于 2014-11-13 19:13:00

回复 9楼iceman的帖子

多谢版主:还有一个问题,就是在这个事件中,为啥拦截不到 ctrl+xctrl+v 呢? 这也是编辑么
页: [1] 2
查看完整版本: 将要进入编辑