Combobox Inhalt lässt sich nicht ändern

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

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

    Combobox Inhalt lässt sich nicht ändern

    Hallo Community,
    es ist eigentlich total simpel, aber ich drehe gleich durch. Ich erkläre einmal die Funktion um die es geht.
    Ich habe eine Datenbank mit Inhalten. Diese werden beim Start ausgelesen und in ein Datatable gepackt.
    Aus diesem Datatable extrahiere ich den Inhalt und schmeiße diesen Wort für Wort in Combobox.Items.
    Im späteren Programmablauf wird daraufhin der User (Optional) aus der Combobox ein Wert auswählen, dieser wird dann automatisch in eine Textbox geschrieben.
    Daraufhin möchte ich den angezeigten Text der Combobox gerne wieder auf "Optional" setzten, so wie er auch standardmäßig nach Programmstart ist.
    Allerdings lässt er mich dies einfach nicht machen. Ich habe einen Sub der auf die Combobox zugreift: Combobox.SelectedIndexChanged .
    An dem Sub liegt es definitiv nicht, daher ist der Code auch uninteressant.
    Ich habe einmal den Code gepostet, der den Datenbank Inhalt in das Datatable schreibt, vielleicht kann man da ja etwas mit anfangen.

    VB.NET-Quellcode

    1. Dim sql_beilage As String
    2. sql_beilage = "SELECT * FROM Speisekarte WHERE Kategorie= '" & "Extrawunsch" & "'"
    3. Dim adapter_beilage As New OleDbDataAdapter(sql_beilage, con1)
    4. adapter_beilage.Fill(dt_belag)
    5. For i As Integer = 0 To dt_belag.Rows.Count - 1
    6. Dim temp As String = dt_belag.Rows(i).Item(2)
    7. cb_beilage.Items.Add(temp)
    8. cb_beilage.Text = "- Optional -"
    9. Next
    10. Dim sql1_beilage As String
    11. sql1_beilage = "Select * FROM Speisekarte WHERE Kategorie= '" & "Extrawunsch" & "'"
    12. Dim adapter1_beilage As New OleDbDataAdapter(sql1_beilage, con1)
    13. Dim cmd_beilage As New OleDbCommand(sql1_beilage, con1)
    14. con1.Open()
    15. Dim myreader_beilage As OleDbDataReader = cmd_beilage.ExecuteReader
    16. myreader_beilage.Read()
    17. con1.Close()


    Mfg Silvergreen
    ?(
    Aber "- Optional -" ist doch gar kein Item der ComboBox. Von daher musst Du am Ende der leider nicht gezeigten SelectedIndexChanged-Sub den ComboBox-Text einfach wieder auf diesen Wert setzen.
    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.
    @VaporiZed Genau, "- Optional -" ist kein Inhalt, da dieser ja auch nicht ausgewählt werde darf. Es ist einfach nur ein Platzhalter.
    In dem SelectedIndexChanged-Sub wird gefragt ob einige vorherigen Werte stimmen,wenn das nicht der Fall ist, soll der Inhalt der Combobox wieder auf
    "- Optional -" zurückgesetzt werden. Das mache ich mit combobox.text. Nur wie schon erwähnt liegt es nicht an dem Sub.

    VB.NET-Quellcode

    1. If txtbox_nr.Text = "" And txtbox_preis.Text = "" Then
    2. cb_beilage.Text = "- Optional -"
    3. MsgBox("Bitte trage erst eine Best.Nr. ein")
    4. Exit Sub
    5. End if
    ?(
    Ah, ich weiß zwar nicht, warum das so ist, aber es dürfte da ein wenig zuviel gleichzeitig passieren.
    Bau eine Pause ein, um das Problem zu umgehen. Ist keine Lösung, sondern ein workaround:

    VB.NET-Quellcode

    1. Private Async Sub cb_beilage_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cb_beilage.SelectedIndexChanged
    2. If txtbox_nr.Text = "" AndAlso txtbox_preis.Text = "" Then
    3. Await Threading.Tasks.Task.Delay(10)
    4. cb_beilage.Text = "- Optional -"
    5. MessageBox.Show("Bitte trage erst eine Best.Nr. ein")
    6. Return
    7. End if
    8. End Sub


    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden. Stichwort MsgBox aus dem VB6-Namespace.
    und: Der Unterschied zwischen And und AndAlso/Or und OrElse

    ##########

    Mein Eventschnüffler(code) sagt: Nach dem SelectedIndexChanged-Event kommt nix mehr. Auch wenn Du da ne MessageBox einbaust, kommt nur noch ein GotFocus-Event und einige Format-Events. Beim ersteren führt die Änderung von cb_beilage.Text zu keiner Änderung und im Format-EventHandler solltest Du keinen Text ändern, sonst gibt es ne Endlosschleife.
    Ein anderer (unschönerer) workaround: ohne Async/Await, aber der ComboBox den Eingabefocus wegnehmen, indem Du ein anderes CE selektierst. Das löst dann u.a. die CB-Leave, -Validating, und-Validated-Events aus.
    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 1 mal editiert, zuletzt von „VaporiZed“ ()