ComboBox.SelectedValue entspricht nicht den angezeigten text, wenn DropDownStyle = DropDownList in Windows 7
Sagen wir, wir haben den folgenden code in einer Windows-Anwendung:
ComboBox comboBox = new ComboBox()
{
AutoCompleteMode = AutoCompleteMode.SuggestAppend,
AutoCompleteSource = AutoCompleteSource.ListItems,
DataSource = new string[] { "", "Ark", "Boat", "Bucket" },
DropDownStyle = ComboBoxStyle.DropDownList
};
this.Controls.Add(comboBox);
TextBox textBox = new TextBox()
{
Left = comboBox.Right,
Top = comboBox.Top,
ReadOnly = true
};
textBox.DataBindings.Add("Text", comboBox, "SelectedValue");
this.Controls.Add(textBox);
Keine Magie hier, nur ein ComboBox
gebunden, um eine Liste von strings. Die TextBox
zeigt die SelectedValue
des ComboBox
.
Ich bin immer unerwartetes Verhalten geben, wenn ich "Eimer" in der ComboBox
und Reiter entfernt. Für einige Grund, die ComboBox
zeigt "Boot" aber die TextBox
zeigt "Eimer". Ich würde erwarten, dass Sie sowohl auf die Anzeige "Eimer".
Verhält es sich, wie erwartet, wenn ich die DropDownStyle
zu DropDown
, aber ich don ' T möchten, dass Benutzer in der Lage sein zu geben, was Sie wollen. Sie sollten nur geben können Elemente in der Liste.
Noch interessanter ist, dass nach Eingabe von "Eimer" und die Tab Weg, wenn ich den Typ "Eimer" wieder zeigt es "Eimer" in beiden. Wenn ich einen Dritten Versuch, geht es zurück zum "Boot" für die ComboBox
und "Eimer" für das `Textfeld'. So wie es scheint, ist es mit dem Fahrrad durch alle B ' s.
Ich habe nicht bemerkt, bis ich ein Upgrade von XP auf Windows 7 vor kurzem. Ich sehe nicht, wie das hätte nichts damit zu tun, aber ich bin werfen es sowieso.
Ob dieses Verhalten korrekt ist, kann mir jemand sagen, was ich tun sollte, um meinen erwarteten Verhalten?
UPDATE scheint diese ist im Zusammenhang mit Windows 7. Alles verhält sich wie erwartet in Windows XP-Modus. Kann jemand mit Windows 7 versuchen meinen code, und stellen Sie sicher, dass bin ich nicht verrückt?
Ich fügte
comboBox.SelectedIndexChanged += new EventHandler(delegate { Console.WriteLine("SelectedIndex = {0}", comboBox.SelectedIndex); });
und die Ausgabe sagt der SelectedIndex
geändert auf "2" und dann "3", die dem entspricht, was die TextBox
zeigt.Wenn dies ein reproduzierbarer bug ist, sollten Sie es auf Microsoft Connect: connect.microsoft.com/VisualStudio
Ich hatte gehofft, jemand anderes läuft Win7 konnte erst bestätigen, aber ich habe Voraus gegangen und öffnete Sie einen Fehler: connect.microsoft.com/VisualStudio/feedback/....
Ich habe es gerade ausprobiert und ich kann wieder zu (obwohl ich habe nicht versucht, um zu sehen, ob es repros auf XP). Ich habe von Ihnen positiv bewertet werden Connect bug erklärt und ich kann repro es. Diese Frage kann nun geschlossen werden.
InformationsquelleAutor Ecyrb | 2010-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese hotfix dieses Problem zu lösen.
Gut, das ist der link zur download-Seite des hotfix von Microsoft ausgeliefert hat. Da gibt es nicht viel hinzuzufügen, hier, und ich erwarte nicht, dass dieser link zu verfallen 🙂
InformationsquelleAutor bittusarkar
Ein workaround könnte sein, die änderung der
DropDownStyle
zuDropDown
und füge die folgenden:Dass können die Benutzer nichts eingeben, aber es wird nicht lassen Sie die Registerkarte, Weg von der Kontrolle, es sei denn, Sie haben einen gültiges Element.
Immer noch nicht glücklich mit dem Verhalten Wechsel von XP zu Win 7.
e.Cancel = Not (comboBox.Items.Contains(comboBox.Text))
.InformationsquelleAutor Ecyrb
Lief ich in das ich und fand ein paar workarounds. Am Ende rollte ich meine eigene Lösung, da eine ComboBox, in der Unterklasse:
InformationsquelleAutor Pennidren
Ich meine eigene Lösung, da ich nicht glaube, dass die Bereitstellung von ein hotfix für alle Benutzer von Computern sinnvoll oder machbar. Allerdings der hotfix-Beschreibung des Problems beschreibt mein problem. Siehe Liste unten für Beispiel:
Eichel
Apple
Schlechte
Bed
Ziegel
Käse
Wenn ich die Auswahl ein Element beginnend mit B wie Bett, es würden Sie die erste Zeit, beginnend mit B, die Schlecht wäre. Dies ist, wenn ich nur die ersten zwei Zeichen Sein (nicht getestet Typisierung gesamte Zeichenfolge als meine Reale Welt, Fall, dies wäre unzumutbar für einen Benutzer, dies zu tun).
Ich habe eine ComboBox mit folgenden Einstellungen:
AutoCompleteMode - SuggestAppend,
AutoCompleteSource - ListItems,
DropDownStyle - DropDownList.
Um das problem zu lösen habe ich Folgendes, als ich bemerkte, dass meine gewünschte Wert ausgewählt wurde, während das SelectedIndexChanged-Ereignis, aber nicht das Verlassen-Ereignis.
Das Lassen-Ereignis scheint-Adresse die Taste enter. Das KeyUp (KeyDown hat nicht funktioniert) schien fix tab Problem.
InformationsquelleAutor Matt
Kann ich immer noch reproduzieren diese auf Windows 10, so dass ich dachte, ich möchte hinzufügen, mein workaround auf der Liste.
InformationsquelleAutor IKx2cf
Ich weiß, diese Antwort ist schon ziemlich alt, aber ich war die eine Antwort auf diese Windows 7 Fehler. Ich gebastelt, um für eine Weile in die Vene des Ecyrb und kam mit der folgenden work-around:
In InitForm() für die Anwendung Hinzufügen dieser Eigenschaft:
Ab, wo sich die ComboBox befindet:
Nun, in meinem Beispiel verwende ich ein benutzerdefiniertes Steuerelement, das inherits comboBox. Sie müssen also die wire diese für Ihren eigenen Gebrauch.
InformationsquelleAutor websch01ar
Überschreiben der
OnTextChanged
Methode und einfach nicht übergeben Sie die Nachricht an die Basis.InformationsquelleAutor Mark