2013-12-02 2 views
0

У меня есть форма окон, которая сохраняет данные на ButtonClick событие, но я также хочу, чтобы выполнить это событие, когда пользователь нажимает клавишу некоторые платы ярлык, таких как: CTRL +S сохранить. Я пробовал форму KeyDown event и KeyPress event, но они просто не стреляют. Думаю, я что-то упускаю.Как установить сочетание клавиш для события ButtonClick?

Private Sub frmExchangeSymbolMapping_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress 
     If Asc(e.KeyChar) = Keys.Control AndAlso Asc(e.KeyChar) = Keys.E Then 
      MessageBox.Show("Testing") 
     End If 
    End Sub 

Я принимаю C# ответы тоже (если он может быть преобразован в Vb с помощью онлайн-инструментов: P)

ответ

5

Установите KeyPreview property формы в true. Это сначала зарегистрирует все ключевые события с самой формой и, если не будет найдена комбинация, с компонентом, сфокусированным в данный момент.

+1

также используйте http://msdn.microsoft.com/ru-ru/library/system.windows.forms.control.keypress(v=vs.110).aspx, чтобы узнать, разрешено ли contol –

0

Мое решение находится здесь, в C#.

1. Установите FormKeyPreview недвижимости в true.
2. Подписаться на KeyDown Событие Form, как показано ниже:

this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown); 

3. обрабатывать KeyDown событие Form, как показано ниже:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Control && e.KeyCode == Keys.S) 
      MessageBox.Show("Ctrl + S pressed!"); 
    } 

Полный код:

this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown); 
private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Control && e.KeyCode == Keys.S) 
     MessageBox.Show("Ctrl + S pressed!"); 
} 
+0

Где именно у меня есть поместить 'Me.KeyDown + = New System.Windows.Forms.KeyEventHandler (Me.Form1_KeyDown)' Потому что я получаю ошибку в 'Me' – Arbaaz

+0

@Arbaaz: вы можете добавить этот оператор в загрузку формы. –

+0

'Ошибка « Открытое событие KeyDown (отправитель как объект, e As System.Windows.Forms.KeyEventArgs) »является событием и не может быть вызвано напрямую. Используйте выражение «RaiseEvent», чтобы поднять событие. – Arbaaz

1
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean 
    Select Case msg.Msg 
     Case &H100, &H104 
      Select Case keyData 
       Case Keys.Control Or Keys.E 
        MessageBox.Show("Control + E Pressed") 
        Exit Select 
      End Select 
     Exit Select 
    End Select 
    Return MyBase.ProcessCmdKey(msg, keyData) 
End Function 
+0

Вы также можете попробовать добавить полосу меню и добавить ярлык к этому событию –

0

Если вы установите текст для кнопки на & Save Alt-S будет нажать на кнопку, предполагая там не меню перехвата Ctrl-S.

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