找回密码
 立即注册

QQ登录

只需一步,快速开始

leikaihua

注册会员

25

主题

78

帖子

193

积分

注册会员

积分
193

活字格认证

[已处理] 将要进入编辑

leikaihua
注册会员   /  发表于:2014-11-10 18:11  /   查看:10781  /  回复:13
在 BeforeEditMode  事件中:如何使用户不进入编辑。

13 个回复

正序浏览
iceman
社区贡献组   /  发表于:2014-11-17 14:38:00
14#
回复 13楼leikaihua的帖子

请通过以下代码测试:

  1. Private Sub fpSpread1_KeyDown(KeyCode As Integer, Shift As Integer)
  2. Select Case KeyCode
  3. Case vbKeyV
  4.       If (Shift And vbCtrlMask) > 0 Then
  5.           MsgBox "CTRL V is pressed"
  6.       End If
  7.       
  8. Case vbKeyC
  9.       If (Shift And vbCtrlMask) > 0 Then
  10.          MsgBox "CTRL C is pressed"
  11.       End If
  12. End Select
  13. End Sub
复制代码


为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢

评分

参与人数 1满意度 +5 收起 理由
leikaihua + 5 版主很热心

查看全部评分

回复 使用道具 举报
leikaihua
注册会员   /  发表于:2014-11-14 19:05:00
13#
回复 12楼iceman的帖子

多谢版主耐心回复: Spread EditMode 是单元格进入编辑状态后才触发;那还有比这个更靠前的事件吗?比如 将要进入编辑状态?  或者 可以触发  ctrl+x  ctrl+v  的事件?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-11-14 18:32:00
12#
回复 10楼leikaihua的帖子

Spread EditMode 是单元格进入编辑状态后才触发,具体说是启动了一个编辑器。
而 ctrl+x  ctrl+v 没有出现可编辑的文本框。所以没有触发。

很抱歉,Spread for ActiveX 产品没有在易语言环境进行过测试。目前确实没有更好的方法来解决这个问题。
回复 使用道具 举报
leikaihua
注册会员   /  发表于:2014-11-13 21:00:00
11#
回复 9楼iceman的帖子

版主  还想麻烦您一下   在VB中  Cancel = True  已经解决了这个问题。

但是我在易语言中使用,它不支持变体型。导致无法正确赋值。  还有其它变通方法吗?
回复 使用道具 举报
leikaihua
注册会员   /  发表于:2014-11-13 19:13:00
10#
回复 9楼iceman的帖子

多谢版主:  还有一个问题,就是在这个事件中,为啥拦截不到 ctrl+x  ctrl+v 呢? 这也是编辑么
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-11-13 13:49:00
9#
回复 8楼leikaihua的帖子

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

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

  2. Me.fpSpread1.EditMode = False
  3. Me.fpSpread1.Row = Row
  4. Me.fpSpread1.Col = Col

  5. Me.fpSpread1.Lock = True

  6. Cancel = True

  7. End Sub
复制代码
回复 使用道具 举报
leikaihua
注册会员   /  发表于:2014-11-12 20:28:00
8#
回复 7楼iceman的帖子

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

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

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

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

所以呢:这样不行。我就想问一下 难道不能对该事件返回假 让它如同没有发生吗?  SPr 这个都没有考虑?还是?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-11-12 17:19:00
7#
回复 6楼leikaihua的帖子

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

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

  3. Me.fpSpread1.Lock = True
复制代码
回复 使用道具 举报
leikaihua
注册会员   /  发表于:2014-11-12 12:05:00
6#
目标就是:拦截用户通过任何方式在某个单元格输入数据,然后不允许他做任何编辑。

就如同:用户将要编辑某个单元格,程序内部发现该单元格不允许编辑,然后使用户不允许通过任何方式再改变单元格内容。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部