检测左键单击DataGridView标头时是否按下CTRL键



我在VB.Net中创建了一个类,它是DataGridView的子级。我正在尝试创建一个方法,该方法检测左键单击某个列标题的时间,然后检查单击事件触发时是否按下了CTRL键。这是我迄今为止的代码:

Private Sub Self_ColumnHeaderLeftClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles Me.ColumnHeaderMouseClick
If e.Button <> MouseButtons.Left Then Return
If (Control.ModifierKeys = (Keys.LControlKey Or Keys.RControlKey) Then
MessageBox.Show(Columns(e.ColumnIndex).Name)
EndIf
End Sub

现在假设它很简单,只要按住CTRL键并左键单击其中一个标题,就会弹出一个消息框。然而,什么也没发生。我知道事件方法正在启动,因为如果我将MessageBox行移动到If语句下的Else块中,就会出现消息框。我做错了什么?

Control.ModifierKeys的类型为System.Windows.Forms.Keys,它是用FlagsAttribute注释的枚举类型。你可能想测试一种情况,比如:

(Control.ModifierKeys AND Keys.LControlKey = Keys.LControlKey) OR (Control.ModifierKeys AND Keys.RControlKey = Keys.RControlKey)

这个表达式的前半部分说"是Control.ModifierKeys中设置的Keys.LControlKey的所有位。后半部分对Keys.RControlKey做同样的事情。

您可能会根据自己的需求调整

Private Sub SomeDGV_ColumnHeaderMouseClick(sender As Object,
e As DataGridViewCellMouseEventArgs) Handles dgvPending.ColumnHeaderMouseClick
If e.Button = Windows.Forms.MouseButtons.Left Then
If My.Computer.Keyboard.CtrlKeyDown Then
'control key down
Else
'
End If
End If
End Sub

条件应该是

Control.ModifierKeys = Keys.LControlKey Or Control.ModifierKeys = Keys.RControlKey

因为Keys.LControlKey Or Keys.RControlKey组合两个Keys值以形成包含LControlKeyRControlKey两者的新值。这意味着您必须同时按下两个控制键。

请参阅:使用带位标志的枚举值来处理多个选项


好吧,不管你按哪个控制键,看起来你都得到了Keys.Control。所以只需测试

if Control.ModifierKeys = Keys.Control Then

相关内容

最新更新