2012-06-07 2 views
2

Я пытаюсь имитировать headerclick в столбце 1 столбца datagridview с помощью сочетаний клавиш, но я не знаю, как это сделать.Имитировать щелчок заголовка в DataGridView

Private Sub frm_lista_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles Me.KeyDown 
    If e.KeyCode = Keys.S And e.Alt Then 
    'this handler exists 
    DataGridView1_ColumnHeaderMouseClick(whathere, whathere) 
    End If 
End Sub 

Любая помощь?

ответ

4

Убедитесь, что форма имеет это свойство набора:

Me.KeyPreview = True 

Поскольку вы пытаетесь указать столбец 1 из события клавиатуры, вы можете передать ваши собственные аргументы события:

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown 
    If ((Control.ModifierKeys And e.Alt) AndAlso e.KeyCode = Keys.S) Then 
    Dim mea As New MouseEventArgs(MouseButtons.None, -1, -1, -1, -1) 
    Dim dgvcme As New DataGridViewCellMouseEventArgs(1, -1, -1, -1, mea) 
    DataGridView1_ColumnHeaderMouseClick(DataGridView1, dgvcme) 
    End If 
End Sub 

Событие теперь должен иметь набор свойств e.ColumnIndex.

Private Sub DataGridView1_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick 
    If e.ColumnIndex = 1 Then 
    MessageBox.Show("OK") 
    End If 
End Sub 

В качестве альтернативы, вы можете просто вызвать подпрограмму из обоих мест:

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown 
    If ((Control.ModifierKeys And e.Alt) AndAlso e.KeyCode = Keys.S) Then 
    Call HandelColumnOneClick() 
    End If 
End Sub 

Private Sub DataGridView1_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick 
    If e.ColumnIndex = 1 Then 
    Call HandleColumnOneClick() 
    End If 
End Sub 

Private Sub HandleColumnOneClick() 
    '// Do Something 
End Sub 
+0

Привет Ларс. Мой обработчик keydown уже работает так, как ожидалось, но проблема в DataGridView1_ColumnHeaderMouseClick, где у меня это: Dim col_index = e.ColumnIndex, и это генерирует исключение, если я отправляю «Nothing» обработчику. Поэтому мне кажется, что я должен послать нечто «более определенное», чем «Ничто». Я хотел бы отправить клик на заголовок столбца «1». –

+0

Однако, я стараюсь это: Dim е Как System.Windows.Forms.DataGridViewCellMouseEventArgs f.ColumnIndex = 1 DataGridView1_ColumnHeaderMouseClick (отправитель, е), но е только для чтения, так вот путь или обходной путь, чтобы отправить f.columnindex обработчику DataGridView1_ColumnHeaderMouseClick? –

+0

@ user973238 Обновленный ответ. – LarsTech

Смежные вопросы