KeyDown probleme

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von heinosh.

    KeyDown probleme

    Hallo

    Ich habe folgendes Problem. Auf meiner Form ist ein Tab-Control , in der sich eine Textbox befindet.
    Nach der Eingabe einer Zahl in der Textbox und dem drücken von Enter soll eine Abfrage ausgeführt werden.
    Sobald ich eine Zahl nur eingebe, springt dar Coursor gleich weiter.
    Ich weiß nicht was an dem Code falsch ist.

    Wenn ich das in einer anderen Form packe, funktioniert es.

    VB.NET-Quellcode

    1. Private Sub S_Id_1_txt_Enter(sender As Object, e As KeyEventArgs) Handles S_Id_1_txt.KeyDown
    2. SQL.ExecQuery("SELECT Name,Mesh_size,Weight FROM dbo.Equipment WHERE id ='" & S_Id_1_txt.Text & "'")
    3. For Each r As DataRow In SQL.DBDT.Rows
    4. If r Is Nothing Then
    5. Exit Sub
    6. Else
    7. End If
    8. S_Name1_Lbl.Text = r("Name").ToString
    9. S_Groeße1_Lbl.Text = r("Mesh_size").ToString
    10. S_Gewicht1_Lbl.Text = r("Weight").ToString
    11. Next
    12. S_Data1_Txt.Focus()
    13. End Sub

    heinosh schrieb:

    VB.NET-Quellcode

    1. S_Data1_Txt.Focus()
    Genau so hast Du das programmiert.
    Frage zuerst ab, ob die Enter-Taste gedrückt wurde.
    Dann setze einen Haltepunkt in die Prozedur und überprüfe, ob sie das tut, was Du glaubst, dass sie tut bzw. was sie tun soll.
    Lerne zu debuggen:
    Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @heinosh, genau das meint er. Du fragst nicht nach ob wirklich 'die Eine Taste' (bei dir Enter) gedrückt wurde. Du sagst nur er soll etwas tun wenn eine Taste gedrückt wurde. Deshalb kommst du auch nicht dazu noch eine weitere Zahl bzw ein Zeichen einzugeben. Prüf mal deine erste Zeile. Dann stellst du fest, dass in der zweiten Zeile nicht gleich dein SQL Code stehen sollte sondern das was @RodFromGermany gesagt hat. Dir fehlt etwas damit dein Code weiß, dass er nur in einem ganz genau festgelegten Moment arbeiten soll.
    Oh Shit.... ja. Seh es jetzt selber. Sorry.

    VB.NET-Quellcode

    1. Private Sub S_Id_1_txt_Enter(sender As Object, e As KeyEventArgs) Handles S_Id_1_txt.KeyDown
    2. If (e.KeyCode = Keys.Enter) Then
    3. SQL.ExecQuery("SELECT Name,Mesh_size,Weight FROM dbo.Equipment WHERE id ='" & S_Id_1_txt.Text & "'")
    4. For Each r As DataRow In SQL.DBDT.Rows
    5. If r Is Nothing Then
    6. Exit Sub
    7. Else
    8. End If
    9. S_Name1_Lbl.Text = r("Name").ToString
    10. S_Groeße1_Lbl.Text = r("Mesh_size").ToString
    11. S_Gewicht1_Lbl.Text = r("Weight").ToString
    12. Next
    13. End If
    14. S_Data1_Txt.Focus()
    15. End Sub



    Das ist jetzt der richtige Code. Das Problem besteht aber trotzdem.
    Er prüft nicht ob Enter gedrückt wurde.
    @Schmittmuthelm hat es dir vorgesagt. Dein Code sagt ja:WENN eine Taste gedrückt wird dann:WENN es die Enter Taste ist DANN führe deine Code aus. Am Ende springe zu Feld S_Data1_Txt (S_Data1_Txt.Focus()).
    WENN es nicht die Taste Enter war dann mache nichts. ABER: Am Ende springe zu Feld S_Data1_Txt (S_Data1_Txt.Focus()).
    Fehler gefunden? :D

    heinosh schrieb:

    Nein, das tut er nicht.
    Klasse. X(

    heinosh schrieb:

    Sobald ich eine Taste ( egal welche) drücke
    Lerne zu debuggen.
    Arbeite Dein Programm zeilenweise ab.
    Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!