Soort van "If CapsLock = On Then...."

Status
Niet open voor verdere reacties.

Daantje3

Gebruiker
Lid geworden
5 mei 2011
Berichten
428
Hallo allemaal,

Ik zoek een stukje code dat ongeveer dit doet:

Code:
If Capslock = On Then
Me.Show()
'En dan een timer1 die er binnen 3 seconden voor zorgt dat Me.Hide() word gedaan
'Timer2 die ervoor zorgt dat Timer1 wordt gestopt in 3,1 seconden 
Else
'Hier doet ie weer Me.Show()
Me.Show()
'En dan een timer1 die er binnen 3 seconden voor zorgt dat Me.Hide() word gedaan
'Timer2 die ervoor zorgt dat Timer1 wordt gestopt in 3,1 seconden 
End If

Voor de mensen die dat niet snapten:

Ik wil dat als Caps aangezet wordt dat Form1 wordt weergegeven die na 3 seconden weer verborgen wordt
en als Caps uitgezet wordt dat Form1 weer komt waarna die weer na 3 seconden verborgen wordt

- EDIT:
Ik heb het geprobeerd, maar wat er gebeurt:
Hij gaat ff snel weg en komt weer snel terug. Soort van herhaling
 
Laatst bewerkt:
Volgens mij zou dit precies moeten doen wat je wil:
[CPP]Public Class Form1

Private CapsLockOn As Boolean = False
Private CheckCapsLockThr As New System.Threading.Thread(AddressOf CheckCapsLock)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Not CheckCapsLockThr.IsAlive Then
Me.Hide()
CheckCapsLockThr = New System.Threading.Thread(AddressOf CheckCapsLock)
CheckCapsLockThr.Start()
Else
MsgBox("Thread is already alive.")
End If
End Sub

Private Sub CheckCapsLock()
Do
If My.Computer.Keyboard.CapsLock = True Then
If Not CapsLockOn Then
CapsLockOn = True
ShowForm()
Threading.Thread.Sleep(3000)
HideForm()
End If
Else
If CapsLockOn Then
CapsLockOn = False
ShowForm()
Threading.Thread.Sleep(3000)
HideForm()
End If
End If
Loop
End Sub

Private Sub ShowForm()
If InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf ShowForm))
Else
Me.Show()
End If
End Sub

Private Sub HideForm()
If InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf HideForm))
Else
Me.Hide()
End If
End Sub

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
End
End Sub
End Class
[/CPP]

Het maakt gebruik van multithreading, waardoor het form ook niet zal 'bevriezen'. Als je er nog vragen over hebt, zal ik ze graag beantwoorden! :)

MartinJM
 
Het werkt geweldig! Heel erg bedankt, hier was ik naar op zoek :D
aaawwwweeeeeessssssoooooommmmmeeeee!!!!

Ik heb nog wel een Label2 waar moet staan "CapsLock is ..."
hoe doe ik dat dan? Want ik krijg een error :(



EDIT:

Laat maar. Ik heb het met een timer gedaan :D
 
Laatst bewerkt:
Ik ben blij dat je het zelf hebt opgelost! Druk je ook even op 'vraag opgelost' bovenaan je eerste post?

Verder kreeg je een foutmelding omdat het niet is toegestaan om een control aan te roepen vanuit een andere thread dan de hoofd thread. Je kan daarvoor dan ook deze code gebruiken:
[CPP]Public Class Form1

Private CapsLockOn As Boolean = False
Private CheckCapsLockThr As New System.Threading.Thread(AddressOf CheckCapsLock)
Private Delegate Sub CallSetText(ByVal Text As String)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Not CheckCapsLockThr.IsAlive Then
Me.Hide()
CheckCapsLockThr = New System.Threading.Thread(AddressOf CheckCapsLock)
CheckCapsLockThr.Start()
Else
MsgBox("Thread is already alive.")
End If
End Sub

Private Sub CheckCapsLock()
Do
If My.Computer.Keyboard.CapsLock = True Then
If Not CapsLockOn Then
CapsLockOn = True
ShowForm()
SetText("Capslock is on")
Threading.Thread.Sleep(3000)
HideForm()
End If
Else
If CapsLockOn Then
CapsLockOn = False
ShowForm()
SetText("Capslock is off")
Threading.Thread.Sleep(3000)
HideForm()
End If
End If
Loop
End Sub

Private Sub ShowForm()
If InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf ShowForm))
Else
Me.Show()
End If
End Sub

Private Sub HideForm()
If InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf HideForm))
Else
Me.Hide()
End If
End Sub

Private Sub SetText(ByVal Text As String)
If InvokeRequired Then
Dim d As New CallSetText(AddressOf SetText)
Me.Invoke(d, New Object() {Text})
Else
Label1.Text = Text
End If
End Sub

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
End
End Sub
End Class[/CPP]

MartinJM
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan