Form1 soll fokussiert sein, nicht Textbox oder ComboBox!

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Bartosz.

    Form1 soll fokussiert sein, nicht Textbox oder ComboBox!

    Hi, ich habe gerade festgestellt, dass nach dem Programmstart die Combobox automatisch fokussiert ist. Das heißt, wenn ich die Pfeiltasten drücke, wechselt das Selected Item der ComboBox. Das will ich nicht haben. Sondern die Form1 soll fokussiert sein, damit Private Sub Form1_KeyPress aufgerufen wird. Im Designer steht KeyPreview auf True.

    Ich habe bereits im Internet allerhand (böse) Lösungen gesehen, gibt es da etwas Normales?

    Ich habe .Show(), .Focus() probiert. Ebenso den TabIndex zu ändern. Kein Erfolg.

    Edit: Ich habe auch
    Me.Select() probiert. Damit gehen zwar Tastendrücke im Sinne von Buchstaben, aber immer noch keine Pfeiltasten. Das ist mein Problem. Ganz im Gegenteil – die Pfeiltasten bewirken, dass der Cursor wieder in die ComboBox springt.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Bartosz“ ()

    Mal aus der Hüfte geschossen. Nen panel in die Form rein (Dockstyle.Fill) und da dann die Combobox drauf. Der Panel dann der ersten/kleinsten Tabindex geben.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Nein, AFAIK können Container keinen Focus bekommen. Nimm ein anderes Eingabecontrol, welches den 1. Focus bekommt.
    Und Form_KeyPress geht doch glaub eh nur mit KeyPreview, wenn ein Eingabecontrol auf dem Form ist. Eben weil dieses den Focus an sich reißt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @mrMo Das hat leider nichts gebracht. Mit den Pfeiltasten rutscht der Cursor wieder in die Combobox (auch wenn sie auf dem Panel liegt)

    VB.NET-Quellcode

    1. TableLayoutPanel1.Controls.Add(ComboBox1, 1, TableLayoutPanel1.RowCount - 1)


    Eben weil dieses den Focus an sich reißt.
    Hmm, das ist ja jetzt blöd ... Ich wollte eigentlich gezielt Form1_KeyPress nehmen, weil ich dann sofort den KeyChar habe. Sonst gibt er mir "Shiftkey" und "Oem7" aus, statt "Ä".




    Ich habe nun testhalber ein zweites Formular erstellt. Auch hier gehen die Pfeiltasten nicht.

    Aufruf:

    VB.NET-Quellcode

    1. Private Sub Button_St_Click(sender As Object, e As EventArgs) Handles Button_St.Click
    2. Using SF As New SteuerForm
    3. If SF.ShowDialog(Me) = DialogResult.OK Then
    4. Debug.WriteLine("OK")
    5. Else
    6. Debug.WriteLine("nicht OK")
    7. End If
    8. End Using
    9. End Sub


    VB.NET-Quellcode

    1. Public NotInheritable Class SteuerForm
    2. Private Sub SteuerForm_KeyPress(sender As Object, e As KeyPressEventArgs) Handles MyBase.KeyPress
    3. Debug.WriteLine(e.KeyChar)
    4. End Sub
    5. Private Sub Button_Close_Click(sender As Object, e As EventArgs) Handles Button_Close.Click
    6. Me.DialogResult = DialogResult.OK
    7. Me.Close()
    8. End Sub
    9. Private Sub SteuerForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    10. Me.KeyPreview = True
    11. End Sub
    12. End Class





    Ok, ich merke gerade, für die Erkennung von Pfeiltasten muss man das KeyDown-Event nehmen. Jetzt habe ich einen Salat... Weil sowohl Ä als auch Oem7 und Shiftkey gefunden wird. Wie kann man gescheit unterscheiden, ob ein Buchstabe oder eine Pfeiltaste gedrückt wurde?
    Bilder
    • Screenshot 2021-02-23 182158.png

      33,84 kB, 681×896, 59 mal angesehen
    • Screenshot 2021-02-23 183956.png

      2,74 kB, 89×123, 100 mal angesehen

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Bartosz“ ()

    Ich habe nun eine (erste) Lösung, wie folgt:
    • separates Formular erstellen, ohne irgendwelche Controls (Buttons, Textboxen, etc)
    • hier KeyDown- und KeyPress abfragen
    • separate Klasse schreiben. Hierin gibt es eine List(of String), in der sind alle vereinarbeiten Tasten, die ich will.
    • abfragen, ob die Tasten in der List vorkommen.
    Nun erkennt man sowohl Pfeiltasten, als auch Buchstaben und Steuertasten (ENTER, Backspace, Shift, etc). Ich füge einen Screenshot bei. Nicht über die doppelten Vorkommen wundern, ich gebe die Tasten ja doppelt aus. ;)

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public NotInheritable Class SteuerForm
    2. Private Sub SteuerForm_KeyPress(sender As Object, e As KeyPressEventArgs) Handles MyBase.KeyPress
    3. If Class_Key.Tasten.Contains(e.KeyChar.ToString) Then
    4. Class_Key.letzte_Taste = e.KeyChar.ToString
    5. End If
    6. Last_Key()
    7. End Sub
    8. Private Sub Button_Close_Click(sender As Object, e As EventArgs)
    9. Me.DialogResult = DialogResult.OK
    10. Me.Close()
    11. End Sub
    12. Private Sub SteuerForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    13. Me.KeyPreview = True
    14. End Sub
    15. Private Sub SteuerForm_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    16. If Class_Key.Tasten.Contains(e.KeyCode.ToString) Then
    17. Class_Key.letzte_Taste = e.KeyCode.ToString
    18. End If
    19. Last_Key()
    20. End Sub
    21. Private Sub Last_Key()
    22. Debug.WriteLine(Class_Key.letzte_Taste)
    23. End Sub
    24. End Class


    VB.NET-Quellcode

    1. Public NotInheritable Class Class_Key
    2. Public Shared Tasten As New List(Of String) From {
    3. "Up",
    4. "Down",
    5. "Left",
    6. "Right",
    7. "a",
    8. "b",
    9. "c",
    10. "d",
    11. "e",
    12. "f",
    13. "g",
    14. "h",
    15. "i",
    16. "j",
    17. "k",
    18. "l",
    19. "m",
    20. "n",
    21. "o",
    22. "p",
    23. "q",
    24. "r",
    25. "s",
    26. "t",
    27. "u",
    28. "v",
    29. "w",
    30. "x",
    31. "y",
    32. "z",
    33. "ä",
    34. "ö",
    35. "ü",
    36. "ß",
    37. "Return", 'ENTER
    38. "Back",
    39. "NumPad0",
    40. "NumPad1",
    41. "NumPad2",
    42. "NumPad3",
    43. "NumPad4",
    44. "NumPad5",
    45. "NumPad6",
    46. "NumPad7",
    47. "NumPad8",
    48. "NumPad9",
    49. "Decimal",
    50. "ShiftKey"}
    51. Public Shared letzte_Taste As String = ""
    52. End Class

    Bilder
    • Screenshot 2021-02-23 192137.png

      5,13 kB, 98×448, 67 mal angesehen