ComboBox, Reinschreiben und Auflisten

  • VB.NET

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

    ComboBox, Reinschreiben und Auflisten

    Hallo zusammen,
    ich versuche die Combobox zu verstehen. Dazu habe ich mir von der Seite:
    vbarchiv.net/tipps/tipp_440-co…nd-vervollstaendigen.html
    in meine Codeseite geladen, und zwar innerhalb der KeyPress-Methode der ComboBox cbVorname.

    VB.NET-Quellcode

    1. Private Sub cbVorname_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbVorname.SelectedIndexChanged
    2. ' in ComboListe aufnehmen
    3. Dim I As Integer
    4. Dim bExists As Boolean
    5. With cbVorname
    6. If KeyAscii = 13 And .Text <> "" Then
    7. ' Prüfen ob bereits vorhanden
    8. bExists = False
    9. For I = 0 To .ListCount - 1
    10. If .List(I) = .Text Then
    11. bExists = True : Exit For
    12. End If
    13. Next I
    14. If Not bExists Then .AddItem.Text
    15. .SelStart = 0
    16. .SelLength = 999
    17. End If
    18. End With
    19. End Sub


    Das passt so natürlich nicht zusammen, da fehlt der Bezug des Codes zu e.keyPress?
    Auch meckert VS weil .ListCount .List(I) .AddItem .SelStart .SelLength kein Member von ComboBox sind.

    Mit Vorschlägen von Google bin ich nicht weitergekommen.
    Habt ihr Tipps für mich?
    Schönen Gruß
    Trebron

    - Visual Studio Community 2017 -

    Trebron schrieb:

    und zwar innerhalb der KeyPress-Methode
    What :?:
    Ich sehe da ein SelectedIndexChanged-Event in Deinem Code.
    Was genau soll denn da passieren?
    Und:
    Lass Dir von der IDE helfen.
    Tipp ein: "cbVorname" {PUNKT}{TAB}, da wird Dir angezeigt, was es da an Membern gibt.
    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!
    Oh hach, falscher Handler meinerseits. Hier der KeyPress-Handler:

    VB.NET-Quellcode

    1. Private Sub cbVorname_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cbVorname.KeyPress
    2. ' in ComboListe aufnehmen
    3. Dim I As Integer
    4. Dim bExists As Boolean
    5. With cbVorname
    6. If KeyAscii = 13 And .Text <> "" Then
    7. ' Prüfen ob bereits vorhanden
    8. bExists = False
    9. For I = 0 To .ListCount - 1
    10. If .List(I) = .Text Then
    11. bExists = True : Exit For
    12. End If
    13. Next I
    14. If Not bExists Then .AddItem.Text
    15. .SelStart = 0
    16. .SelLength = 999
    17. End If
    18. End With
    19. End Sub
    Schönen Gruß
    Trebron

    - Visual Studio Community 2017 -
    @Trebron Was soll da passieren?
    Wo kommt die Variable KeyAscii her?
    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!
    Lass das mal mit SelStart und SelLength. Und .AddItem.Text, ListCount und List(i) auch. Das sind alles VB6-Anachronismen. Wenn, dann allerhöchstens cbVorname.Items.Add(WasHinzugefügtWerdenSoll), cbVorname.Items.Count und cbVorname.Items(i).ToString.
    Wie RfG schon schrieb: KeyAscii ist nicht existent. Wenn Du den EventHandler von KeyPress auf KeyDown änderst, kommst Du aber mit e.KeyValue an dieser Stelle weiter.
    Aber: Eine ComboBox sollte sich nicht selbst manipulieren. Besser ist es, wenn Du die ComboBox an eine DataSource bindest und die manipulierst.

    ##########

    In m.E. »1. Variante Schön« wäre es:

    VB.NET-Quellcode

    1. Private Sub cbVorname_KeyDown(sender As Object, e As KeyEventArgs) Handles cbVorname.KeyDown
    2. If e.KeyValue = 13 AndAlso Not String.IsNullOrEmpty(cbVorname.Text) Then AddNewItemTo(cbVorname)
    3. End Sub
    4. Private Sub AddNewItemTo(ComboBox As ComboBox)
    5. If Not ComboBox.Items.Cast(Of String).Contains(ComboBox.Text) Then ComboBox.Items.Add(ComboBox.Text)
    6. End Sub


    Man kann natürlich auch alles im KeyDown-EventHandler lassen. Aber das ist Geschmacksfrage.

    btw: AutoCompleteSource, AutoCompleteCustomSource und AutoCompleteMode kennst und verwendest Du schon, oder?
    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.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „VaporiZed“ ()

    Combobox ist ein recht eigenartiges Control.
    Es heisst Combobox, weils ein DropDown-Feld mit einer Textbox kombiniert.

    Diese Kombination ist nur leider völlig unsinnig.
    Mit einem DropDown tut man was auswählen aus einer gegebenen Liste.
    Mit einer Textbox tut man einen Wert eingeben.

    Nu kann man denken - ok, wenn der User anfängt, Text einzutippen, dann willer wohl was hinzufügen.
    Aber das hat keinen Sinn, weil wenner sich vertippt hat, bietet die Combobox ihm die Möglichkeit, den Mist wieder rauszulöschen?

    Also Zufügen/Ändern/Löschen ist Funktionalität, die zusammen-gehört, und die von Combobox nicht abgedeckt werden kann.

    Langer Rede kurzer Sinn: Stell die Combo auf ComboboxStyle.DropDown, und vergiss die Textbox, die da rein-kombiniert wurde.

    Trebron schrieb:

    ich versuche die Combobox zu verstehen.
    Jo, wenn Verstehen schwerfällt, liegts gelegentlich nicht an geistiger Schwerfälligkeit, sondern daran, dass das zu Verstehende unsinnig ist. :thumbup: