Foxtable(狐表)用户栏目专家坐堂 → [求助]与CTRL+D 代码有关的求助


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

主题:[求助]与CTRL+D 代码有关的求助

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
[求助]与CTRL+D 代码有关的求助  发帖心情 Post By:2021/5/19 17:19:00 [只看该作者]

表事件 PrepareEdit
'禁止编辑
If e.IsFocusCell Then
    Select Case e.Col.Name
        Case "合同号"
            If e.Row("记录来源") = "系统导入" Then
                e.Cancel = True
            End If
    End Select
End If

现在假定有2行记录,第1行记录的“记录来源”为人工录入,然后,用户可以在合同号中任意录入,第2行的记录是 "系统导入",用户双击此行的合同号格字是不能进入编辑状态的,但是,如果用户选择第1行与第2行的合同号二个格子,然后按CTRL+D,就会将第1行记录中的合同号内容覆盖到第2行记录中的合同号,因此突破了代码中对当记录来源为系统导入时禁止修改合同号的约束。
请问老师有何办法解决吗?当然,请不要简单的禁用掉CTRL+D,这个快捷键还是很有用的。
谢谢

 回到顶部
帅哥,在线噢!
y2287958
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4746 积分:34528 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2021/5/19 17:23:00 [只看该作者]

在菜单中找到这个组件,然后在组件代码中设置条件

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


加好友 发短信
等级:超级版主 帖子:110494 积分:562348 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/20 9:16:00 [只看该作者]

导入系统菜单,更改重复填充菜单的代码

If CurrentTable.Name <> "表B"
    Syscmd.Edit.RepeatFill()
Else
    Dim r As Row = CurrentTable.Rows(CurrentTable.TopPosition)
    Dim nr As Row
    For i As Integer = CurrentTable.TopPosition+1 To CurrentTable.BottomPosition
        nr = CurrentTable.Rows(i)
        If nr("记录来源") <> "系统导入" Then
            nr(CurrentTable.LeftCol) = r(CurrentTable.LeftCol)
        End If
    Next
End If


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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2021/5/20 12:44:00 [只看该作者]

这样不够灵活,随着项目的开发,不断的增加表,经常要去这个菜单代码更改太麻烦了,我有个想法,就是不知代码如何写:
在当前表的某个表事件中,如果当前列是 “合同号”,刚此次按下的CTRL+D按键无效,请老师根据我这个思路写下例子,谢谢!

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


加好友 发短信
等级:超级版主 帖子:110494 积分:562348 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/20 13:43:00 [只看该作者]

只能这样。没有办法在表事件控制

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2021/5/20 14:16:00 [只看该作者]

哪就上面老师给的代码,如何实现,仅仅是“合同号”列不能用CTRL+D呢,谢谢老师!

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


加好友 发短信
等级:超级版主 帖子:110494 积分:562348 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/20 14:24:00 [只看该作者]

If CurrentTable.Name <> "表B"
    Syscmd.Edit.RepeatFill()
Elseif CurrentTable.Cols(CurrentTable.LeftCol).name = "合同号"
    Dim r As Row = CurrentTable.Rows(CurrentTable.TopPosition)
……

 回到顶部
帅哥,在线噢!
y2287958
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4746 积分:34528 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2021/5/20 17:17:00 [只看该作者]

用一个变量即可

 回到顶部