как сделать сочетания клавиш в vb.net - PullRequest
0 голосов
/ 13 февраля 2012

Я хочу запустить определенный код с помощью ярлыков, определенных для моей конкретной программы.Например, если я нажму F1 или Ctrl + C , я хочу, чтобы моя программа показывала список клиентов.Я пробовал событие keydown формы со следующим кодом

If e.KeyCode = Keys.F1 Then
    Form6.button4.performclick()
End If

Но, похоже, это не работает.Может ли кто-нибудь помочь мне в этом?

Я использую vb.net в Visual Studio 2005 для разработки своего приложения

Ответы [ 8 ]

4 голосов
/ 16 апреля 2012

Попробуйте это:

Private Sub frmCustomerDetails_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' When the form loads, the KeyPreview property is set to True.
    ' This lets the form capture keyboard events before
    ' any other element in the form.
    Me.KeyPreview = True
End Sub

    Private Sub frmCustomerDetails_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    If (e.Alt AndAlso (e.KeyCode = Keys.P)) Then
        ' When Alt + P is pressed, the Click event for the print
        ' button is raised.
        RaiseEvent btnPrintCustomerDetails.Click
    End If
End Sub

Источник

Хотя вам лучше создать собственное событие и повысить его, чем вызывать событие нажатия кнопки..

2 голосов
/ 14 февраля 2012

"Клавиша доступа - это подчеркнутый символ в тексте меню, элемента меню или метки элемента управления, такого как кнопка. С помощью клавиши доступа пользователь может" нажать "кнопку, нажав клавишу ALT в сочетании с предопределенным ключом доступа.Например, если кнопка запускает процедуру для печати формы, и, следовательно, ее свойство Text установлено на «Печать», добавление амперсанда перед буквой «P» заставляет букву «P» Подчеркните в тексте кнопки во время выполнения. Пользователь может запустить команду, связанную с кнопкой, нажав ALT + P. У вас не может быть клавиши доступа для элемента управления, который не может получить фокус. "

Ключи доступа

Попробуйте ключи доступа?

1 голос
/ 24 октября 2013

Вот очень простой способ сделать что-то подобное:

Private Sub RichTextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles RichTextBox1.KeyPress

    If Keys.T + Keys.ControlKey Then
        TextBox1.Text = RichTextBox1.SelectedText    
    End If

End Sub

Это с 2010 года.

1 голос
/ 13 февраля 2012

Как получить сочетания клавиш в Visual Studio .NET Там есть несколько примеров VB.

0 голосов
/ 14 мая 2016

Я сталкивался с такой же ситуацией, я использовал menustrip и назначенные ярлыки, использовал функцию executeclick и установил для свойства menustrip значение false, и оно работало нормально.

0 голосов
/ 10 апреля 2013

Я видел ответы в списке, и это довольно старый, но попробуйте это.Горячие клавиши установлены как alt + d или alt + c, как указано.Эта разница в коде между тем, что они вам дают, и тем, что я вам даю, заключается в том, что это работает, даже когда приложение свернуто.

Public Const MOD_ALT As Integer = &H1           'Alt key
Public Const WM_HOTKEY As Integer = &H312       '


<DllImport("User32.dll")> _
Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer,  ByVal vk As Integer) As Integer
End Function

<DllImport("User32.dll")> _
Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
End Function

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    If m.Msg = WM_HOTKEY Then
        Dim id As IntPtr = m.WParam
        Select Case (id.ToString)
            Case "100"
                MessageBox.Show("You pressed ALT+D key combination")
            Case "200"
                MessageBox.Show("You pressed ALT+C key combination")
        End Select
    End If
    MyBase.WndProc(m)
End Sub

Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)  Handles MyBase.FormClosing
    UnregisterHotKey(Me.Handle, 100)
    UnregisterHotKey(Me.Handle, 200)
End Sub


Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    RegisterHotKey(Me.Handle, 100, MOD_ALT, Keys.D)
    RegisterHotKey(Me.Handle, 200, MOD_ALT, Keys.C)
end sub
0 голосов
/ 14 февраля 2012

Ваш код правильный, но вы должны установить keyPreview = true в вашей форме

0 голосов
/ 14 февраля 2012

Я предпочитаю создавать ярлыки, добавляя меню для ярлыков, добавляя пункты меню для каждого ярлыка, а затем привязывая ярлык к пунктам меню. Это хорошо, потому что он документирует доступные ярлыки и делает кодирование очень простым.

...