Form laten verschijnen na het te hebben 'gehide't'

Status
Niet open voor verdere reacties.

Totaalzinloes

Nieuwe gebruiker
Lid geworden
19 nov 2010
Berichten
4
Code:
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
Handles Me.KeyDown
       If e.KeyCode = Keys.PageUp Then
           Me.Hide()
           Me.ShowInTaskbar = False

       End If

       If e.KeyCode = Keys.PageDown Then
           Me.Show()
           Me.ShowInTaskbar = True
       End If
   End Sub
End Class

Zo staan de zaken er ongeveer een beetje voor. Als ik op pageup klik, dan wordt mijn form onzichtbaar. Het probleem is dat ik hem hierna niet weer zichtbaar kan maken, omdat de form niet gefocust is.

Iemand een oplossing waardoor ik hem, nadat ik form1 heb gehide't, hem kan laten showen?
 
Wat je kan doen is gebruik maken van een keyboardhook. Deze reageert op toetsaanslagen zelfs als het form niet actief is, dus dit is wat je nodig hebt.

Om tijd te besparen ga ik niet uitleggen hoe je een keyboardhook gebruikt omdat ik dat al eens eerder heb uitgelegt in een ander topic. Dus ik zou zeggen, neem dat topic even door om te zien hoe je een keyboardhook gebruikt.

Topic vind je hier.

Als laatste, en dat moet op zich niet uitmaken maar het staat wel netter, jij hebt twee If statements terwijl je precies hetzelfde kan doen met één If statement, zo:

Code:
       If e.KeyCode = Keys.PageUp Then
           Me.Hide()
           Me.ShowInTaskbar = False
       ElseIf e.KeyCode = Keys.PageDown Then
           Me.Show()
           Me.ShowInTaskbar = True
       End If

Simpeler kan haast niet. :)
 
Laatst bewerkt:
Dankje! Zou je dat voorbeeldje met die keyhook weer even online willen zetten :"D?
 
Ehhmmm. Hoe add je die dll bij je toolbox?
edit: al gevonden. Alleen dat notify ding staat niet in mijn toolbox
Nvm. Ik heb nu dit
Code:
Public Class Form1

    Private Sub KeyboardHook_KeyDown(ByVal sender As System.Object, ByVal e As WindowsHookLib.KeyEventArgs) Handles KeyboardHook.KeyDown

         Select e.KeyCode

            Case Keys.PageUp

                Me.Hide()
                Me.ShowInTaskbar = False
                KeyboardHook.InstallHook()

            Case Keys.PageDown

                Me.Show()
                Me.ShowInTaskbar = True
                KeyboardHook.Dispose()

        End Select
    End Sub
End Class

Why doesnt it woooork T______T
 
Laatst bewerkt:
De KeyboardHook reageert alleen op toetsaanslagen wanneer je de KeyboardHook hebt geactiveert met de KeyboardHook1.InstallHook() methode. In jouw code heb je die methode onder de KeyboardHook_KeyDown sub gezet en omdat de kbh nog niet is aangeroepen, wordt die hele sub natuurlijk niet uitgevoerd.

Je moet dus die methode ergens anders aanroepen. In jouw geval in het Form Load event.

En de KeyboardHook.Dispose() methode zet je onder het Form Closing event.
 
Code:
Public Class Form1

    Private Sub KeyboardHook_KeyDown(ByVal sender As System.Object, ByVal e As WindowsHookLib.KeyEventArgs) Handles KeyboardHook.KeyDown

         Select e.KeyCode

            Case Keys.PageUp

                Me.Hide()
                Me.ShowInTaskbar = False
                KeyboardHook.Dispose()
            Case Keys.PageDown

                Me.Show()
                Me.ShowInTaskbar = True


        End Select
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        KeyboardHook.InstallHook()
    End Sub
End Class

Zo dus? In dit geval geeft hij een error bij de line van KeyboardHook.InstallHook(). Namelijk: Win32Exception was unhandled.....
 
Vreemd, maar je moet KeyboardHook.Dispose() ook weghalen uit de KeyDown sub. KeyboardHook.Dispose() doet het tegenovergestelde van KeyboardHook.Install(), het deactiveert de KeyboardHook. En omdat dit gebeurt op het moment dat het form verborgen is, kun je het het form ook niet meer terughalen omdat je de hook gedeactiveert hebt (disposed).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan