Combobox Wechsel per nummerischen Tastendruck

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

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von mgbig.

    Combobox Wechsel per nummerischen Tastendruck

    Moin !

    Ich möchte Folgendes bewerkstelligen:

    Ich habe eine Combobox und möchte per nummerischen Tastendruck (1-9) das Item auswählen, das dieser Nummer entspricht, wenn Sie den Focus hat.
    Also wenn ich 1 drücke combox.selctedindex = 1
    Wenn ich 2 drücke combox.selctedindex=2, etc.
    und natürlich soll dannach nicht der Wert in der Combobox stehen dessen Taste gedrückt wird (was im Moment der Fall ist)

    Ich möchte das für Comboboxen haben, bei denen recht häufig eine Auswahl getroffen wird und ich sie so schnell auswählen kann. Unter VB 4 habe ich das hinbekommen, hier hänge ich leider im Moment.
    Danke
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )

    mgbig schrieb:

    das dieser Nummer entspricht
    Gib der Form KeyPreview = True.
    So was, die Sortierung musst Du dann ggf. an Deine Werte anpassen.

    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    2. Dim index = -1
    3. Select Case e.KeyCode
    4. Case Keys.NumPad0
    5. index = 0
    6. Case Keys.NumPad1
    7. index = 1
    8. Case Keys.NumPad2
    9. index = 2
    10. Case Keys.NumPad3
    11. index = 3
    12. Case Keys.NumPad4
    13. index = 4
    14. Case Keys.NumPad5
    15. index = 5
    16. Case Keys.NumPad6
    17. index = 6
    18. Case Keys.NumPad7
    19. index = 7
    20. Case Keys.NumPad8
    21. index = 8
    22. Case Keys.NumPad9
    23. index = 9
    24. Case Else
    25. index = -1
    26. End Select
    27. Me.ComboBox1.SelectedIndex = index
    28. End Sub
    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!
    Jau, geht. Ich habe es noch ein wenig modifiziert.

    Quellcode

    1. Dim index = -1
    2. Select Case e.KeyCode
    3. Case Keys.NumPad0, Keys.D0
    4. index = 0
    5. Case Keys.NumPad1, Keys.D1
    6. index = 1
    7. Case Keys.NumPad2, Keys.D2
    8. index = 2
    9. Case Keys.NumPad3, Keys.D3
    10. index = 3
    11. Case Keys.NumPad4, Keys.D4
    12. index = 4
    13. Case Keys.NumPad5, Keys.D5
    14. index = 5
    15. Case Keys.NumPad6, Keys.D6
    16. index = 6
    17. Case Keys.NumPad7, Keys.D7
    18. index = 7
    19. Case Keys.NumPad8, Keys.D8
    20. index = 8
    21. Case Keys.NumPad9, Keys.D9
    22. index = 9
    23. Case Else
    24. index = -1
    25. End Select
    26. Me.combobox1.SelectedIndex = index
    27. e.SuppressKeyPress = True


    Wobei ich finde, das der Code sehr lang ist für das was er tun soll. Es wäre doch einfacher einen ASCII Wert abzufragen und den dann zu verarbeiten, oder?
    Danke !
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )
    Oder du machst eine Dictionary(Of Keys, Integer) und fügst dann die Keys hinzu und machst dann:

    VB.NET-Quellcode

    1. Me.ComboBox1.SelectedIndex = deinDic(e.KeyCode)


    Das Hinzufügen wird dann wahrscheinlich auch länger sein, aber dann hat man auch ne andere Möglichkeit :)

    ~ Alex-Digital :D

    EDIT: Musst auch natürlich überprüfen mit ContainsKey von der Dictionary-Klasse, ob der Key überhaupt gültig ist, ansonsten machst du -1.
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    da geht sogar ein Simples Array

    VB.NET-Quellcode

    1. Private _Key2Int As Keys() = New Keys() {Keys.D0, Keys.D1, Keys.D2, Keys.D3, Keys.D4, Keys.D4, Keys.D5, Keys.D6, Keys.D7, Keys.D8, Keys.D9}
    2. Public Sub New()
    3. InitializeComponent()
    4. ComboBox1.Items.AddRange( _Key2Int)
    5. '...
    6. ComboBox1.SelectedIndex = _Key2Int.IndexOf(e.KeyCode)

    @ErfinderDesRades In dieser Einfachheit habe ich es mir gedacht, aber wenn ich es richtig sehe, dann kann ich so nur Nummernblock oder oben auf der Tastatur realisieren. (ich hab den Code grad nicht ausprobiert :( )

    Wie dem auch sei, eine Lösung ist auf mehrfachem Weg gefunden. Danke!
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )