2014-01-18 3 views
1

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

Я использовал этот код, чтобы скрыть его:

Protected Overrides Sub SetVisibleCore(ByVal value As Boolean) 
    If Not Me.IsHandleCreated Then 
     Me.CreateHandle() 
     value = False 
    End If 
    MyBase.SetVisibleCore(value) 
End Sub 

То, что я хочу именно показать форму, когда я нажимаю ALT +X, например.

+1

Возможный дубликат [VB.NET Обнаружение нажатия клавиши при минимизации] (http://stackoverflow.com/questions/5216222/vb-net-detecting-keypress-while-minimized) –

ответ

2

Используйте глобальную горячую клавишу. Таким образом, вам не нужно беспокоиться о том, что ваше приложение имеет фокус. Хороший пример для VB.Net здесь:

http://www.kirsbo.com/How_to_add_global_hotkeys_to_applications_in_VB.NET

Резюмируя. Определение класса HotKey:

Public Class Hotkey 

#Region "Declarations - WinAPI, Hotkey constant and Modifier Enum" 
     ''' <summary> 
     ''' Declaration of winAPI function wrappers. The winAPI functions are used to register/unregister a hotkey 
     ''' </summary> 
     Public Declare Function RegisterHotKey Lib "user32" _ 
     (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer 

     Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer) As Integer 

     Public Const WM_HOTKEY As Integer = &H312 

     Enum KeyModifier 
      None = 0 
      Alt = &H1 
      Control = &H2 
      Shift = &H4 
      Winkey = &H8 
     End Enum 'This enum is just to make it easier to call the registerHotKey function: The modifier integer codes are replaced by a friendly "Alt","Shift" etc. 
#End Region 


#Region "Hotkey registration, unregistration and handling" 
     Public Shared Sub registerHotkey(ByRef sourceForm As Form, ByVal triggerKey As String, ByVal modifier As KeyModifier) 
      RegisterHotKey(sourceForm.Handle, 1, modifier, Asc(triggerKey.ToUpper)) 
     End Sub 
     Public Shared Sub unregisterHotkeys(ByRef sourceForm As Form) 
      UnregisterHotKey(sourceForm.Handle, 1) 'Remember to call unregisterHotkeys() when closing your application. 
     End Sub 
     Public Shared Sub handleHotKeyEvent(ByVal hotkeyID As IntPtr) 
      MsgBox("The hotkey was pressed") 
     End Sub 
#End Region 

    End Class 

Затем добавьте следующую Sub к вашей основной форме:

'System wide hotkey event handling 
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
    If m.Msg = Hotkey.WM_HOTKEY Then 
    Hotkey.handleHotKeyEvent(m.WParam) 
    End If 
    MyBase.WndProc(m) 
End Sub 

Затем зарегистрировать HotKey в код запуска для вашей формы:

Hotkey.RegisterHotKey(Me, "X", Hotkey.KeyModifier.Alt) 

Первый Параметр - это форма, вторая - ключ для обработки, а третий - ключ-модификатор. Как только этот Hotkey будет зарегистрирован, он вызывает код в HotKey.handleHotKeyEvent.

Затем вы можете использовать какой-то Обратный вызов, чтобы вызвать метод в самой вызывающей форме, если вы этого желаете.

+0

Возможно, вы должны включить соответствующий код из этого ссылку в вашем ответе в случае, если ссылка будет нарушена в будущем. Затем вы можете просто перечислить эту ссылку в качестве источника. –

+0

@CodeMaverick Хорошая идея. Пристрастился к краткости без уважительной причины. –

+0

Abs sol ute ly. –

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