Sto scrivendo un programma in Visual Basic 2010, esattamente un programma che testa una tastiera. Alla pressione di un tasto sulla tastiera, la Q in questo caso, sulla tastiera simulata sul monitor si dovrà colorare solo la Q... ho scritto dunque questo codice
Public Class Form1
Private Sub KeyDownEventHandler(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
If e.KeyCode = Keys.Q Then
Button1.PerformClick()
End If
End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
RemoveGlobalEventHandler(Me, "KeyDown", New KeyEventHandler(AddressOf KeyDownEventHandler))
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddGlobalEventHandler(Me, "KeyDown", New KeyEventHandler(AddressOf KeyDownEventHandler))
End Sub
Private Sub AddGlobalEventHandler(ByVal container As Control,
ByVal eventName As String,
ByVal eventHandler As [Delegate])
If container IsNot Nothing Then
Dim controlType = container.GetType()
Dim eventInfo = controlType.GetEvent(eventName)
If eventInfo IsNot Nothing Then
eventInfo.AddEventHandler(container, eventHandler)
End If
For Each ctrl As Control In container.Controls
AddGlobalEventHandler(ctrl, eventName, eventHandler)
Next
End If
End Sub
Private Sub RemoveGlobalEventHandler(ByVal container As Control,
ByVal eventName As String,
ByVal eventHandler As [Delegate])
If container IsNot Nothing Then
Dim controlType = container.GetType()
Dim eventInfo = controlType.GetEvent(eventName)
If eventInfo IsNot Nothing Then
eventInfo.RemoveEventHandler(container, eventHandler)
End If
For Each ctrl As Control In container.Controls
AddGlobalEventHandler(ctrl, eventName, eventHandler)
Next
End If
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.ForeColor = System.Drawing.Color.Red
End Sub
End Class
Solo che quando vado a premere Q si colorano tutti i button! Potreste correggermelo?