Combobox.text ändert den Index nicht!?

  • VB.NET
  • .NET (FX) 4.0

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

    Combobox.text ändert den Index nicht!?

    Hallo ins Forum,
    ich habe hier ein Problem mit dem Belegen einer Combobox.

    Sobald .text mit einem String beschrieben wird, ändert sich der Wert in SelectedIndex nicht. Dieser bleibt immer so, wie er vorher war.
    Bei manueller Eingabe eines Textes funktioniert es.

    Hier ein Code-Beispiel:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. For Each i In {"null", "eins", "zwei", "drei", "vier"}
    3. ComboBox1.Items.Add(i)
    4. Next
    5. ComboBox1.SelectedIndex = 0
    6. TextBox1.Text = ComboBox1.SelectedIndex.ToString
    7. End Sub
    8. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    9. ComboBox1.Text = "minus eins"
    10. TextBox1.Text = ComboBox1.SelectedIndex.ToString 'hier erwarte ich eigentlich den Index -1
    11. End Sub
    12. Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    13. TextBox1.Text = ComboBox1.SelectedIndex.ToString 'funktioniert richtig
    14. End Sub
    15. Private Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) Handles ComboBox1.TextChanged
    16. TextBox1.Text = ComboBox1.SelectedIndex.ToString 'funktioniert richtig
    17. End Sub


    Welchen Denkfehler mache ich?
    Danke für einen Tipp.

    LG
    V.
    warum sollte sich der SelectedIndex ändern, wenn der Text geändert wird.

    Wenn du den SelectedIndex ändern willst, dann ändere am besten den SelectedIndex.

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    2. ComboBox1.SelectedIndex = -1
    3. TextBox1.Text = ComboBox1.SelectedIndex.ToString 'hier erwarte ich eigentlich den Index -1
    4. End Sub

    vg2000 schrieb:

    Bei manueller Eingabe eines Textes
    wird auch ein neues Item generiert, sofern die Property DropDownStyle auf DropDown steht (default).
    Wenn Du per Code ein neues Item hinzufügst, wird sich auch der SelectedIndex ändern.
    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!
    So funktioniert es :

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    2. ComboBox1.SelectedIndex = -1 'Du Selektierst das Feld -1
    3. ComboBox1.SelectedText = "minus eins" 'und fügst den String an die Selektion
    4. TextBox1.Text = ComboBox1.SelectedIndex.ToString
    5. End Sub
    Vielen Dank für die Antworten.
    Ich möchte nicht explizit den SelectedIndex ändern, sondern eher die Funktionsweise der ComboBox verstehen, sobald ein Wert eingetragen wird.
    Bin davon ausgegangen, dass der SelectedIndex sich automatisch auf den Wert -1 ändert, sobald der Inhalt in irgendeiner Art geändert wird.
    Danke nochmals.

    vg2000 schrieb:

    die Funktionsweise der ComboBox verstehen, sobald ein Wert eingetragen wird.
    Kann ich dir sagen: Es gibt keine Funktionsweise.

    Also wenn du Text reinschreibst, steht der Text drinne, mehr nicht. Und wenn du dann was anneres anwählst, dann ist der Text weg.

    Also die Combo.Text-Property ist ziemlich überflüssig. Ich zB verwende Combos immer mit Databinding, dann kann man von vornherein nix reinschreiben.

    Anders gesagt: Das "Combo" anne ComboBox ist Rubbish. Besser sie hiesse einfach "DropDownListbox" oder so, und ich empfehle auch sie ausschließlich so zu verwenden.


    Probiermal simpelstes Databinding, dass du siehst, was ich meine:

    VB.NET-Quellcode

    1. ' ( ... Handles me.Load )
    2. ComboBox1.DataSource = "1_One 2_Two 3_Three 4_Four 5_Five".Spllit()