PDA

View Full Version : [vb net 2008] tastiera disabilitata


superbau
16-10-2009, 13:10
salve,
io ho intercettato i tasti premuti da tastiera e fin qui tutto bene, funziona tutto.
Il problema sorge quando metto un oggetto tipo bottone o listibox. Infatti se ci sono i tasti che dovrebbero eseguire del codice, essi non funzionano +.

Io penso che il motivo sia perchè il form2 perde il focus o il select e va a finire nei bottoni o nei listbox.

Posto un breve stralcio:


Private Sub Form2_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

If e.KeyCode = Keys.Right Then
'codice che viene eseguito quando premio la freccietta a destra

If PictureBox1.Location.X >= 812 Then
Else
Dim PosizioneX, PosizioneY As Integer
Dim kar As Integer
PosizioneX = PictureBox1.Location.X
PosizioneY = PictureBox1.Location.Y
kar = PosizioneX + Rovel
PictureBox1.Location = New Point(kar, PosizioneY)
End If
premuto = "Est"
end sub


l'unico modo che ho trovato fino ad ora è per ovviare questo era di usare le picturebox e/o label al posto dei bottoni. però non posso sostituire un listbox.

MarcoGG
17-10-2009, 09:34
salve,
io ho intercettato i tasti premuti da tastiera e fin qui tutto bene, funziona tutto.
Il problema sorge quando metto un oggetto tipo bottone o listibox. Infatti se ci sono i tasti che dovrebbero eseguire del codice, essi non funzionano +.

Io penso che il motivo sia perchè il form2 perde il focus o il select e va a finire nei bottoni o nei listbox.

...
...

l'unico modo che ho trovato fino ad ora è per ovviare questo era di usare le picturebox e/o label al posto dei bottoni. però non posso sostituire un listbox.

Non è necessario, puoi usare tutti i controlli che vuoi, pulsanti inclusi. La strada migliore è creare alcuni Handler sui alcuni o tutti i controlli desiderati, che puntano alla medesima routine di gestione ( in questo caso la routine gestirà il movimento della PictureBox... ) :

Private Sub KeyDownControlli(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs)

Select Case e.KeyCode
Case Keys.Right
PictureBox1.Left += 10

Case Keys.Left
PictureBox1.Left -= 10

'Case ...

Case Else
'...
End Select

End Sub

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

'Per la Form
AddHandler Me.KeyDown, AddressOf KeyDownControlli

'Per i Controls
For Each C As Control In Me.Controls
AddHandler C.KeyDown, AddressOf KeyDownControlli
Next

End Sub

;)

superbau
17-10-2009, 12:00
grazie, che dire, sei illuminante!!!