以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]与CTRL+D 代码有关的求助  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=166127)

--  作者:huangfanzi
--  发布时间:2021/5/19 17:19:00
--  [求助]与CTRL+D 代码有关的求助
表事件 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
--  发布时间:2021/5/19 17:23:00
--  
在菜单中找到这个组件,然后在组件代码中设置条件
--  作者:有点蓝
--  发布时间: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
--  发布时间:2021/5/20 12:44:00
--  
这样不够灵活,随着项目的开发,不断的增加表,经常要去这个菜单代码更改太麻烦了,我有个想法,就是不知代码如何写:
在当前表的某个表事件中,如果当前列是 “合同号”,刚此次按下的CTRL+D按键无效,请老师根据我这个思路写下例子,谢谢!

--  作者:有点蓝
--  发布时间:2021/5/20 13:43:00
--  
只能这样。没有办法在表事件控制
--  作者:huangfanzi
--  发布时间:2021/5/20 14:16:00
--  
哪就上面老师给的代码,如何实现,仅仅是“合同号”列不能用CTRL+D呢,谢谢老师!
--  作者:有点蓝
--  发布时间: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
--  发布时间:2021/5/20 17:17:00
--  
用一个变量即可