控制KeyDown事件陷阱CTRL-C等 [英] Control KeyDown Event Trap CTRL-C etc

查看:366
本文介绍了控制KeyDown事件陷阱CTRL-C等的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在处理CTRL-C,CTRL-V,CTRL-X时遇到了问题。

  Private Function HandleKeyDown(sender As Object,
e As KeyEventArgs,
ByVal vShow As String)As Boolean
HandleKeyDown = False
如果e.KeyCode = Keys.F1然后
Help.ShowPopup(Me,vShow,Cursor.Position)
End If
如果e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.Control然后
sender.Copy()
ElseIf e.KeyCode = Keys.V AndAlso e.Modifiers = Keys.Control Then
sender.Paste()
ElseIf e.KeyCode = Keys.X And​​Also e.Modifiers = Keys.Control Then
sender.Cut()
其他
Console.WriteLine(String.Format(修饰符:{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输出的内容。

 修饰符:控制键码:ControlKey KeyData:ControlKey,控制键值:17 

我要去哪里?

解决方案

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

  Private Sub HandleKeyDown(ByVal sender As Object,ByVal e As KeyEventArgs)处理MyBase.KeyDown 
'HandleKeyDown = False

如果e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.Control然后
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 And​​Also 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
结束小组

这对我很有用。我分别得到88,67和86的价值。

I'm having a problem with processing CTRL-C, CTRL-V, CTRL-X on my form.

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

The KeyDown event never picks up the second key. The only value the KeyCode ever seems to hold is Keys.Control. This is what the Console.WriteLine outputs for CTRL-C

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

Where am I going wrong?

解决方案

Are you calling this from the actual event handler? I had to add "Handles MyBase.KeyDown" and remove your extra parameter.

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

It's working for me. I get a value of 88, 67, and 86 respectively.

这篇关于控制KeyDown事件陷阱CTRL-C等的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆