以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]是不是有e参数的事件代码不能作成内部函数  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=179319)

--  作者:2425004926
--  发布时间:2022/8/18 9:20:00
--  [求助]是不是有e参数的事件代码不能作成内部函数
KeyDown事件,功能是限制空格和粘帖,因为用到多处,想着能否作成内部函数,因为有e参数,是不是有e参数的事件代码不能作成内部函数

If e.KeyCode = Keys.Space Then \'不能用空格
    e.Cancel = True
ElseIf ClipBoard.ContainsText Then \'判断剪贴板中有字符
    Dim s As String = ClipBoard.GetText() \'返回字符
    If s.Length >= 10 Then
        If e.Control = True AndAlso e.KeyCode = Keys.V Then \'Ctrl+V
            e.Cancel = True \'必须先取消,否则直接粘帖
            Args(0).Text = left(s, 10) \'再等于第一个字符
        End If
    End If
End If

--  作者:有点蓝
--  发布时间:2022/8/18 9:29:00
--  
可以的,把e作为函数参数传入函数即可
--  作者:2425004926
--  发布时间:2022/8/18 10:00:00
--  
老师再帮忙看一下,是哪里问题
If Args(0) = Keys.Space Then \'不能用空格
    Args(1) = True
ElseIf ClipBoard.ContainsText Then \'判断剪贴板中有字符
    Dim s As String = ClipBoard.GetText() \'返回字符
    If s.Length >= 10 Then
        If Args(2) = True AndAlso Args(0) = Keys.V Then \'Ctrl+V
            Args(1) = True \'必须先取消,否则直接粘帖
            Args(3).Text = left(s, 10) \'再等于第一个字符
        End If
    End If
End If

Functions.Execute("_KeyDown", e.KeyCode, e.Cancel, e.Control, e.Form.Controls("TextBox1")) ’没起到作用,MessageBox.Show(Args(0)) ‘这个值返回32
Functions.Execute("_KeyDown", "e.KeyCode", "e.Cancel", "e.Control", e.Form.Controls("TextBox1")) ‘出错


--  作者:有点蓝
--  发布时间:2022/8/18 10:02:00
--  
dim e = args(0)
If e.KeyCode = Keys.Space Then \'不能用空格
    e.Cancel = True
ElseIf ClipBoard.ContainsText Then \'判断剪贴板中有字符

Functions.Execute("_KeyDown", e, e.Form.Controls("TextBox1"))

--  作者:2425004926
--  发布时间:2022/8/18 10:17:00
--  
 感谢老师!非常好! 总结一下代码
KeyDown事件,功能是限制空格和快捷键粘帖

Dim e = args(0)
If args(0).KeyCode = Keys.Space Then \'不能用空格
    args(0).Cancel = True
ElseIf ClipBoard.ContainsText Then \'判断剪贴板中有字符
    Dim s As String = ClipBoard.GetText() \'返回字符
    If s.Length >= args(1) Then
        If args(0).Control = True AndAlso args(0).KeyCode = Keys.V Then \'Ctrl+V
            args(0).Cancel = True \'必须先取消,否则直接粘帖
            args(0).Sender.Text = left(s, args(1)) \'取剪贴板前几个字符
        End If
    End If
End If

’Functions.Execute("_KeyDown", args(0),取前面字符个数, 控件)
Functions.Execute("_KeyDown", e, 10,e.Form.Controls("TextBox1"))
Functions.Execute("_KeyDown", e, 10,e.sender)


--  作者:有点蓝
--  发布时间:2022/8/18 10:21:00
--  
何必画蛇添足

Dim e = args(0)
If e.KeyCode = Keys.Space Then \'不能用空格
    e.Cancel = True

第3个参数根本没有用到也没有必要传入

Functions.Execute("_KeyDown", e, 10)