2009-07-24 15 views
2

Ok hier ist mein Dilemma. hier dieser Code ist ich habe:Wie man KeyDown in VB.NET behandelt

If e.KeyCode = Keys.A Then 
     TextBox1.AppendText("C, ") 
     PictureBox2.Visible = True 
     My.Computer.Audio.Play(My.Resources.C, AudioPlayMode.Background) 
    End If 

Nun, wenn ich dies unter Form1_KeyDown eingeben, denkt visual basic dies:

System.EventArgs ‚KeyCode nicht aa Mitglied ist ''

Jetzt habe ich habe gesehen, dass dieser Code vorher funktioniert, aber es ist nicht hier. Irgendeine Hilfe?

Hier ist der vollständige Code:

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) 
    If e.KeyCode = Keys.A Then 
     TextBox1.AppendText("A, ") 
     PictureBox2.Visible = True 
     My.Computer.Audio.Play(My.Resources.C, AudioPlayMode.Background) 
    End If 
    If e.KeyCode = Keys.S Then 
     TextBox1.AppendText("C,") 
     PictureBox14.Visible = True 
     My.Computer.Audio.Play(My.Resources.D, AudioPlayMode.Background) 
    End If 
End Sub 
+0

Können Sie den Code der vollständigen Ereignisbehandlungsmethode (einschließlich der Teilanmeldung) enthalten? –

Antwort

6

nicht sicher, warum Sie Methodendefinition e als EventArgs erklärt, aber die Lösung ist einfach die Parameter des Typs KeyEventArgs zu machen. Dies liegt daran, EventArgs (natürlich) enthält keine Eigenschaft namens KeyCode, aber KeyEventArgs tut!

Ihre Event-Handler Methodendefinition folgende Änderung:

Private Sub foo_KeyDown(sender As Object, e As KeyEventArgs) 
    If e.KeyCode = Keys.A Then 
     TextBox1.AppendText("A, ") 
     PictureBox2.Visible = True 
     My.Computer.Audio.Play(My.Resources.C, AudioPlayMode.Background) 
    ElseIf e.KeyCode = Keys.S Then 
     TextBox1.AppendText("C,") 
     PictureBox14.Visible = True 
     My.Computer.Audio.Play(My.Resources.D, AudioPlayMode.Background) 
    End If 
End Sub 
+1

Und nicht zuletzt ist es Teil der Signatur des KeyDown-Ereignisses –

+0

@Fredrik: Ja, das ist der konzeptionelle Weg, es zu betrachten. – Noldorin

+0

Ich schlage vor, Sie geben Ihren Steuerelementen bessere Namen als TextBox1 und PictureBox2 btw. – Noldorin

0

Es klingt wie Ihre Methode die falschen EventArgs verwendet. Das Control.KeyDown-Ereignis sendet es als System.Windows.Forms.KeyEventArgs. Also sollten Sie den Code lesen, wie

Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) 
    // code here 
End Sub 
+0

Nun, das System registriert es nicht mehr als Fehler, aber jetzt wird der Ton nicht mehr wiedergegeben. –

+0

Leider ist VB.Net nicht meine starke Farbe, aber ich würde versuchen, den Speicherort-Parameter von My.Resources.C auf den tatsächlichen Pfad zu ändern und zu sehen, ob dieser abgespielt wird. Ich nehme an, My.Resources.C ist der Speicherort für die Datei oder ist es ein Bytearray? – Joshua

0

Ich habe manchmal haben Sie den vollständigen Objekttyp ähnlich dem unten zur Verfügung stellen müssen:

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 
MsgBox(e.KeyCode.ToString()) 'Message what the keycode 
If (e.KeyCode = Keys.A) Then 
    MsgBox("e.KeyCode = Keys.A") 'Message that I've found the A 
    TextBox1.AppendText("C, ") 
    PictureBox2.Visible = True 
    My.Computer.Audio.Play(My.Resources.C, AudioPlayMode.Background) 
End If 

End Sub

Haben Sie auch versucht, diese Prüfung in einem Textfeld auf dem Formular ähnlich wie folgt (Textfeld im Beispiel heißt TextBoxKeyTest)?

Private Sub TextBoxKeyTest_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBoxKeyTest.KeyDown 
    MsgBox(e.KeyCode.ToString())'Message what the keycode 
    If (e.KeyCode = Keys.A) Then 
     MsgBox("e.KeyCode = Keys.A")'Message that I've found the A 
     TextBox1.AppendText("C, ") 
     PictureBox2.Visible = True 
     My.Computer.Audio.Play(My.Resources.C, AudioPlayMode.Background) 
    End If 
End Sub 
+0

@ Quest4Denali, nein, habe ich nicht. Ich werde es versuchen. –

0

Dies sollte 2010 in VB arbeiten

Private Sub cmdWiden_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp 
     If e.KeyCode = Keys.Up Then Me.Top = Me.Top - 5 
     If e.KeyCode = Keys.Down Then Me.Top = Me.Top + 5 
     If e.KeyCode = Keys.Left Then Me.Left = Me.Left - 5 
     If e.KeyCode = Keys.Right Then Me.Left = Me.Left + 5 
End Sub 
+0

Können Sie Codeformatierung für den Code in dieser Antwort verwenden? –

Verwandte Themen