【问题标题】:Control KeyDown Event Trap CTRL-C etc控制 KeyDown 事件陷阱 CTRL-C 等
【发布时间】:2014-08-11 02:28:21
【问题描述】:

我在处理表单上的 CTRL-C、CTRL-V、CTRL-X 时遇到问题。

Private Function HandleKeyDown(sender As Object,
                                   e As KeyEventArgs,
                                   ByVal vShow As String) As Boolean
        HandleKeyDown = False
        If e.KeyCode = Keys.F1 Then
            Help.ShowPopup(Me, vShow, Cursor.Position)
        End If
        If e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.Control Then
            sender.Copy()
        ElseIf e.KeyCode = Keys.V AndAlso e.Modifiers = Keys.Control Then
            sender.Paste()
        ElseIf e.KeyCode = Keys.X AndAlso e.Modifiers = Keys.Control Then
            sender.Cut()
        Else
            Console.WriteLine(String.Format("Modifiers:{0} KeyCode:{1} KeyData:{2} KeyValue:{3} ", e.Modifiers.ToString, e.KeyCode.ToString, e.KeyData.ToString, e.KeyValue.ToString))
        End If
        HandleKeyDown = True
    End Function

KeyDown 事件从不获取第二个键。 KeyCode 唯一拥有的值似乎是 Keys.Control。这是 Console.WriteLine 为 CTRL-C 输出的内容

Modifiers:Control KeyCode:ControlKey KeyData:ControlKey, Control KeyValue:17 

我哪里错了?

【问题讨论】:

    标签: vb.net forms controls


    【解决方案1】:

    您是从实际的事件处理程序中调用它吗?我必须添加“Handles MyBase.KeyDown”并删除您的额外参数。

    Private Sub HandleKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown
        'HandleKeyDown = False
    
        If e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.Control Then
            MessageBox.Show(String.Format("Modifiers:{0} --- KeyCode:{1}  --- KeyData:{2}  --- KeyValue:{3} ",
                                          e.Modifiers.ToString, e.KeyCode.ToString, e.KeyData.ToString, e.KeyValue.ToString))
            'sender.Copy()
        ElseIf e.KeyCode = Keys.V AndAlso e.Modifiers = Keys.Control Then
            MessageBox.Show(String.Format("Modifiers:{0}  --- KeyCode:{1}  --- KeyData:{2}  --- KeyValue:{3} ",
                                          e.Modifiers.ToString, e.KeyCode.ToString, e.KeyData.ToString, e.KeyValue.ToString))
            'sender.Paste()
        ElseIf e.KeyCode = Keys.X AndAlso e.Modifiers = Keys.Control Then
            MessageBox.Show(String.Format("Modifiers:{0}  --- KeyCode:{1}  --- KeyData:{2}  --- KeyValue:{3} ",
                                          e.Modifiers.ToString, e.KeyCode.ToString, e.KeyData.ToString, e.KeyValue.ToString))
            'sender.Cut()
        End If
    
        'HandleKeyDown = True
    End Sub
    

    它对我有用。我得到的值分别是 88、67 和 86。

    【讨论】:

    • 函数是直接从handler调用的,但是我直接把代码放到Event Handler里面还是不行,所有的值都是Control的。我暂时忘记它,我不知道为什么它不起作用。
    • 我推荐的唯一两件事是尝试仅使用我的代码进行简化测试并从那里重新构建或逐行调试,看看您的布尔值是否阻止您的代码继续运行。可能就是这么简单。除此之外,我发布的代码有效,我只是没有使用你的布尔值。
    • 用你的事件处理函数更新你的问题。
    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    相关资源
    最近更新 更多