VisualBasic .NET - Button per Tastendruck ausführen

palaber

Captain
Registriert
Juni 2006
Beiträge
3.856
Hallo,

leider bin ich nicht so fit mit Events, Handlern und GUIs... naja, auf jeden Fall möchte ich den Mausklick auf einen Button auf eine Taste legen (z.B. 'a'). Dachte ich könnte es so lösen, geht aber nicht. Hab schon gegooglt wie blöd, aber finde den Fehler einfach nicht...

Ich habe aktuell zum testen nur eine Form und ein Button darauf. Dachte es geht so:
Code:
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        AddHandler Me.KeyDown, AddressOf Form1_KeyDown
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MessageBox.Show("YEAH")
    End Sub

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If e.KeyCode = Keys.A Then
            Button1.PerformClick()
        End If
    End Sub

Bin über jede Hilfe dankbar.
 
Hi,

ruf doch einfach in deiner "Button1_Click" eine Methode auf, in der du "MessageBox.Show("YEAH")" machst und ruf die selbe Methode bei "KeyDown" auf. So "emulierst" du quasi einen Mouseclick. Würde ich nicht so machen.

VG,
Mad
 
Du meinst quasi so:

Code:
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        AddHandler Me.KeyDown, AddressOf Form1_KeyDown
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        test()
    End Sub

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If e.KeyCode = Keys.A Then
            test()
        End If
    End Sub

    Private Sub test()
        MessageBox.Show("YEAH")
    End Sub

Geht auch nicht, ich hab das gefühlt, dass nicht auf das KeyDown Event reagiert wird!
 
Das ist ganz fix zu lösen. Benenne den Button wie folgt: Button1.Text = "&q" oder setze direkt die Button-Eigenschaft, ist ja egal wie.
Das Zeichen direkt nach dem "&" wird für Tastendrücke ausgewertet, es darf also auch noch mehr Text drinstehen. Das Formular reagiert hier speziell auf das "q", jeder alternative Buchstabe statt "q" funktioniert natürlich auch. Viel Erfolg!
 
Ah, okay, das versuche ich direkt mal aus! Danke

Wenn ich eine Textbox hinzufüge und dort eine Taste drücke geht es übrigends... vermutlich bedeutet das, dass meine
form1 nicht im focus ist/war, oder?

Code:
Private Sub textBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        test()
End Sub
 
Auf KeyDown kann nur dann reagiert werden, wenn auch die Form den Focus hat.

Dazu gibts noch eine Eigenschaft der Form, nennt sich KeyPreview. Wenn du das aktivierst, dann werden Tastendrücke immer erst an die Form durchgereicht, dann reagiert er zuverlässig.
 
@Rowana: Das geht, aber leider nur solange der Fokus auf der Form ist.

@easy.2ci: Ich versuch gerade die KeyPreview Property zu setzten. Über Me.KeyPreview geht das leider nicht.
Hab mir mal folgendes Beispiel angeschaut: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview(v=vs.100).aspx

Aber steh total auf dem Schlauch. Wo aktiviere ich denn die Eigenschaft?

EDIT: Hab es gefunden - nix im Code sondern im Designer - danke! Jetzt geht es!
 
Zurück
Oben