Vb.net Ctrl+;班次+;X与Ctrl+冲突;X作用

Vb.net Ctrl+;班次+;X与Ctrl+冲突;X作用,vb.net,Vb.net,我们保留了一个菜单项快捷键(Ctrl+Shift+X),以便在Windows VB应用程序中弹出另一个窗体。但当用户试图使用(Ctrl+X)从任何字段剪切文本时,上面的快捷操作就是触发并弹出另一个表单 不确定我们遗漏了什么,或者我们不应该使用(Ctrl+Shift+X)作为快捷方式 Me.mnuTools.Shortcut = System.Windows.Forms.Shortcut.CtrlShiftX 最坏的情况是我们可以改变捷径,但我们希望知道使用捷径是否有问题 请提供您的看法。我无法

我们保留了一个菜单项快捷键(Ctrl+Shift+X),以便在Windows VB应用程序中弹出另一个窗体。但当用户试图使用(Ctrl+X)从任何字段剪切文本时,上面的快捷操作就是触发并弹出另一个表单

不确定我们遗漏了什么,或者我们不应该使用(Ctrl+Shift+X)作为快捷方式

Me.mnuTools.Shortcut = System.Windows.Forms.Shortcut.CtrlShiftX
最坏的情况是我们可以改变捷径,但我们希望知道使用捷径是否有问题


请提供您的看法。

我无法回答为什么它认为CTRL+X应该调用CTRL+SHIFT+X热键,但我相信我有一个解决方法

执行切割操作时,Windows会向聚焦控件发送一条消息。如果我们重写,我们可以阻止CTRL+X组合到达表单的任何子控件,而是自己发送
WM_CUT
消息

未经测试,但我相信它应该有效:

<DllImport("user32.dll")> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr)
End Function

Private Const WM_CUT As Integer = &H300

Protected Overrides Function ProcessCmdKey (ByRef msg As Message, keyData As Keys) As Boolean
    If keyData = (Keys.ControlKey Or Keys.X) AndAlso _
         Me.ActiveControl IsNot Nothing Then
        SendMessage(Me.ActiveControl.Handle, WM_CUT, IntPtr.Zero, IntPtr.Zero) 'Send the WM_CUT message to the currently focused control.
        Return True 'Indicate that we've handled the message and stop the key strokes from reaching any child controls.
    End If
End Function
_
私有共享函数SendMessage(ByVal hWnd作为IntPtr,ByVal Msg作为UInteger,ByVal wParam作为IntPtr,ByVal lParam作为IntPtr)
端函数
私有常量WM_截为整数=&H300
受保护的重写函数ProcessCmdKey(ByRef msg作为消息,keyData作为键)为布尔值
如果keyData=(Keys.ControlKey或Keys.X)和_
那么,Me.ActiveControl就不是什么了
SendMessage(Me.ActiveControl.Handle,WM_CUT,IntPtr.Zero,IntPtr.Zero)'将WM_CUT消息发送到当前聚焦的控件。
Return True'表示我们已经处理了该消息,并停止了任何子控件的按键。
如果结束
端函数

编辑:


未来读者:我知道您可以自己定义热键,并在
KeyDown
ProcessCmdKey
中调用相应的方法,但是我使用了上面的方法,这样菜单项仍然可以显示其CTRL+SHIFT+X提示。

你能显示一些代码吗?如果你想让我们提供建议或给你输入,我们需要查看你的代码,否则这只会变成一个疯狂的猜测游戏,获得实际答案的机会很小。添加了代码,它是表单初始化中的一行快捷键赋值。什么是
mnuTools
MenuStrip
的项目?它是System.Windows.Forms.MenuItem的类型