Wie setze ich das ausgewählte Element in einer ComboBox so, dass es mit C # mit meiner Zeichenfolge übereinstimmt?

196

Ich habe eine Zeichenfolge „test1“ und mein comboBox enthält test1, test2und test3. Wie setze ich das ausgewählte Element auf "test1"? Wie kann ich meine Zeichenfolge einem der ComboBox-Elemente zuordnen?

Ich habe an die folgende Zeile gedacht, aber das funktioniert nicht.

comboBox1.SelectedText = "test1"; 
Peter Mortensen
quelle
wie funktioniert es nicht Was passiert, wenn diese Codezeile ausgeführt wird?
Kate Gregory
@ KateGregory es verkettet nur die "test1" Zeichenfolge mit dem vorhandenen Text
solujic
Wenn Sie eine Möglichkeit haben, den Elementwert zu ermitteln, können Sie Folgendes verwenden: comboBox1.SelectedValue = Value_of_your_string;
César León
SelectedTextändert den Text "Ausgewählt" in test1. Wenn keine "Auswahl" (markierter Text) getroffen wird, wird der Text an der Position des Carets eingefügt.
AaA

Antworten:

277

Dies sollte den Trick tun:

Combox1.SelectedIndex = Combox1.FindStringExact("test1")
Norbert B.
quelle
Scheint mir eine bessere Antwort zu sein, da Sie einen Rückgabewert haben, den Sie temporär in einer Variablen speichern und damit testen können, ob Sie den gesuchten Wert gefunden haben.
Áxel Costas Pena
Was ist, wenn es mehr als einen "test1" -Wert in combox1 gibt
thoitbk
@thoitbk - Laut MSDN unter msdn.microsoft.com/en-us/library/… wird die Methode FindStringExact() "Findet das erste Element im Kombinationsfeld, das der angegebenen Zeichenfolge entspricht".
Dub Stylee
207

Haben Sie die Text- Eigenschaft ausprobiert ? Für mich geht das.

ComboBox1.Text = "test1";

Die SelectedText-Eigenschaft gilt für den ausgewählten Teil des bearbeitbaren Texts im Textfeldteil des Kombinationsfelds.

Andrew Kennan
quelle
7
Sicherlich wird dadurch nur der Text in den bearbeitbaren Bereich der ComboBox gesetzt, anstatt das entsprechende Element aus der Liste auszuwählen? Wenn die Auflistung der Listenelemente Objekte und nicht nur Zeichenfolgen enthält, bezweifle ich, dass dies das entsprechende ListItem-Objekt auswählen würde, sondern nur die Text-Eigenschaft in der ComboBox festlegen würde.
TabbyCool
9
Es setzt die SelectedValue-Eigenschaft des Steuerelements
Henryk
Nett. Funktioniert hervorragend für Schriftgröße, Gewicht und Familien-Pulldowns. Keine Casts oder Konvertierungen zwischen Klassen. Soooo viel einfacher!
Lance Cleveland
3
Nur für den Fall: Dieser Parameter darf erst nach dem Auffüllen der Combobox eingestellt werden.
Antoine Rodriguez
11
Mein Dropdown-Stil für die Combobox ist DropDownList und .Text = "irgendein Text" funktioniert nicht. Diese Lösung hat für mich gut funktioniert: Combox1.SelectedIndex = Combox1.FindStringExact ("test1")
Mayank
48

Angenommen, Ihre Combobox ist nicht datengebunden, müssen Sie den Index des Objekts in der Auflistung "items" in Ihrem Formular finden und dann die Eigenschaft "selectedindex" auf den entsprechenden Index setzen.

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");

Beachten Sie, dass die IndexOf-Funktion möglicherweise eine Argumentausnahme auslöst, wenn das Element nicht gefunden wird.

Spence
quelle
1
Denken Sie daran, dass SelectedINDEX nicht SelectedITEM ist ... Und der Compiler wird sich nicht beschweren, sondern nur den Combobox-Wert nicht festlegen
Rob
Lieben Sie nicht logische Fehler, die keine Ausnahme auslösen, sie funktionieren einfach nicht ...
Spence
Dies ist die Auswahl des Elements, aber nicht das onChange-Ereignis auf der Combobox
aufrufen
39

Wenn die Elemente in Ihrer ComboBox Zeichenfolgen sind, können Sie Folgendes versuchen:

comboBox1.SelectedItem = "test1";
Frederik Gheysels
quelle
18
Nein, ist es nicht: msdn.microsoft.com/en-us/library/…
Frederik Gheysels
Den Tag gerettet! Der ausgewählte Artikel muss dem Typ entsprechen - das war es für mich! Ich kratzte mir am Kopf, warum der ausgewählte Artikel nicht eingestellt war, obwohl der Artikel eindeutig vorhanden war - es stellte sich heraus, dass der Typ nicht übereinstimmte!
Sudhanshu Mishra
Der Vollständigkeit halber ist es hilfreich, die Beschreibung über den obigen Link zu haben, insbesondere da diese Antwort die Übereinstimmungsprüfung durchführt, die von anderen Antworten vorgeschlagen wird, einschließlich der bevorzugten von @norbertB: Wenn Sie die SelectedItem-Eigenschaft auf ein Objekt festlegen, versucht die ComboBox, dieses Objekt zu erstellen die aktuell ausgewählte in der Liste. Wenn das Objekt in der Liste gefunden wird , wird es im Bearbeitungsbereich der ComboBox angezeigt und die SelectedIndex-Eigenschaft wird auf den entsprechenden Index festgelegt. Wenn das Objekt nicht in der Liste vorhanden ist, bleibt die SelectedIndex-Eigenschaft auf ihrem aktuellen Wert.
DanG
10

Bei mir hat das nur funktioniert:

foreach (ComboBoxItem cbi in someComboBox.Items)
{
    if (cbi.Content as String == "sometextIntheComboBox")
    {
        someComboBox.SelectedItem = cbi;
        break;
    }
}

MOD: und wenn Sie Ihre eigenen Objekte als Elemente in der Combobox eingerichtet haben, ersetzen Sie das ComboBoxItem durch eines davon wie folgt:

foreach (Debitor d in debitorCombo.Items)
{
    if (d.Name == "Chuck Norris")
    {
        debitorCombo.SelectedItem = d;
        break;
    }
}
gabore
quelle
2
Dies hat bei mir funktioniert, aber Sie müssen darauf achten, dass die Elemente in Ihrer ComboBox tatsächlich ComboBoxItems sind, da es möglich ist, auch andere Elemente dort abzulegen.
Grant
Dies hat in WinRT 8.1 hervorragend funktioniert. Ich habe das oberste foreach tatsächlich in eine Erweiterungsmethode eingewickelt, wie Dave sie in seiner SelectItemByValue () -Lösung geschrieben hat, und es war wirklich die perfekte Lösung.
Speednet
9

SelectedText dient zum Abrufen oder Festlegen des tatsächlichen Texts im Zeichenfolgeneditor für das ausgewählte Element in der Combobox, wie hier dokumentiert . Dies kann nicht bearbeitet werden, wenn Sie Folgendes festlegen:

comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

Verwenden:

comboBox1.SelectedItem = "test1";

oder:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");
Brian Rudolph
quelle
1
comboBox1.Items.IndexOf ... riskiert eine NullReferenceException, wenn Items leer ist.
Gary
9
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Versuchen Sie dies in Windows Form.

Muhammad Sohail
quelle
7

Ich habe eine Erweiterungsmethode verwendet:

public static void SelectItemByValue(this ComboBox cbo, string value)
{
    for(int i=0; i < cbo.Items.Count; i++)
    {
        var prop = cbo.Items[i].GetType().GetProperty(cbo.ValueMember);
        if (prop!=null && prop.GetValue(cbo.Items[i], null).ToString() == value)
        {
             cbo.SelectedIndex = i;
             break;
        }
    } 
}

Dann verbrauchen Sie einfach die Methode:

ddl.SelectItemByValue(value);
Dave
quelle
5
comboBox1.SelectedItem.Text = "test1";
Ben
quelle
4

Angenommen, test1, test2, test3 gehören zur comboBox1-Sammlung. Die folgende Anweisung funktioniert.

comboBox1.SelectedIndex = 0; 
ihcarp
quelle
Dies funktioniert nicht immer ... Siehe hier: stackoverflow.com/questions/12839444/…
JGFMK
4

Diese Lösung basiert auf MSDN mit einigen Änderungen, die ich vorgenommen habe.

  • Es findet genau oder TEIL der Zeichenfolge und legt sie fest.

    private int lastMatch = 0;
    private void textBoxSearch_TextChanged(object sender, EventArgs e)
    {
        // Set our intial index variable to -1.
        int x = 0;
        string match = textBoxSearch.Text;
        // If the search string is empty set to begining of textBox
        if (textBoxSearch.Text.Length != 0)
        {
            bool found = true;
            while (found)
            {
                if (comboBoxSelect.Items.Count == x)
                {
                    comboBoxSelect.SelectedIndex = lastMatch;
                    found = false;
                }
                else
                {
                    comboBoxSelect.SelectedIndex = x;
                    match = comboBoxSelect.SelectedValue.ToString();
                    if (match.Contains(textBoxSearch.Text))
                    {
                        lastMatch = x;
                        found = false;
                    }
                    x++;
                }
            }
        }
        else
            comboBoxSelect.SelectedIndex = 0;
    }

Ich hoffe ich habe geholfen!

Roman Polen.
quelle
3

Ich habe meine ComboBox mit einer Datentabelle aus einer Datenbank gefüllt. Dann habe ich das DisplayMember und das ValueMember gesetzt. Und ich benutze diesen Code, um das ausgewählte Element festzulegen.

foreach (DataRowView Row in ComboBox1.Items)
{
    if (Row["ColumnName"].ToString() == "Value") ComboBox1.SelectedItem = Row;
}
Jelle Smits
quelle
1

Sie haben diese Eigenschaft nicht in der ComboBox. Sie haben SelectedItem oder SelectedIndex. Wenn Sie die Objekte haben, mit denen Sie das Kombinationsfeld ausgefüllt haben, können Sie SelectedItem verwenden.

Wenn nicht, können Sie die Sammlung von Elementen (Eigenschaftselementen) abrufen und diese wiederholen, bis Sie den gewünschten Wert erhalten, und diesen mit den anderen Eigenschaften verwenden.

ich hoffe es hilft.

Megacan
quelle
1
_cmbTemplates.SelectedText = "test1"

oder vielleicht

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");
Dean
quelle
Mit diesem Code weisen Sie der SelectedItem-Eigenschaft einen Bool zu ... funktioniert imho nicht.
Frederik Gheysels
1
  • Listen Sie ListItems in der Combobox auf
  • Holen Sie sich gleiche Listenindex Set Combobox
  • Setzen Sie den Listenindex auf den gefundenen.

Wenn ich einen solchen Code jedoch als Code-Reviewer sehe, würde ich empfehlen, den gesamten Methodenalgorithmus zu überdenken.

user53378
quelle
2
Warum haben Sie es dann als Antwort gegeben?
1

Ich benutzen KeyValuePair für ComboBox Daten binden , und ich wollte Artikel von finden Wert so in meinem Fall gearbeitet:

comboBox.SelectedItem = comboBox.Items.Cast<KeyValuePair<string,string>>().First(item=> item.Value == "value to match");
Amit Bhagat
quelle
1

Suchen Sie mySecondObject (vom Typ MyObject) in der Combobox (mit einer Liste von MyObjects) und wählen Sie das folgende Element aus:

foreach (MyObject item in comboBox.Items)
{
   if (item.NameOrID == mySecondObject.NameOrID)
    {
        comboBox.SelectedItem = item;
        break;
    }
}
Jos Roestenberg
quelle
0
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

Für Ihren Fall können Sie verwenden

DropDownList.Items.FindByText("Text");
user874163
quelle
0
combo.Items.FindByValue("1").Selected = true;
Anderson
quelle
3
Dies birgt auch das Risiko einer Ausnahme, wenn "1" nicht gefunden wird.
Gary
0

Alle Methoden, Tricks und Codezeilen zum Festlegen des ComboBox-Elements funktionieren erst, wenn die ComboBox übergeordnet ist.

user3599362
quelle
0

Ich habe eine Funktion erstellt, die den Index des Werts zurückgibt

        public static int SelectByValue(ComboBox comboBox, string value)
        {
            int i = 0;
            for (i = 0; i <= comboBox.Items.Count - 1; i++)
            {
                DataRowView cb;
                cb = (DataRowView)comboBox.Items[i];
                if (cb.Row.ItemArray[0].ToString() == value)// Change the 0 index if your want to Select by Text as 1 Index
                {
                    return i;
                }
            }
            return -1;
        }
Monzur
quelle
0

das funktioniert bei mir .....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];
Jaydeep Karena
quelle
1
Während dieser Code die Frage beantworten kann, ist es besser zu erklären, wie das Problem gelöst werden kann, und den Code als Beispiel oder Referenz bereitzustellen. Nur-Code-Antworten können verwirrend sein und keinen Kontext haben.
Robert Columbia
Danke für den Hinweis!
Jaydeep Karena
-1

Sie können sagen comboBox1.Text = comboBox1.Items[0].ToString();

Nishān Wickramrathna
quelle
-2

Bitte versuchen Sie es so, es funktioniert bei mir:

Combobox1.items[Combobox1.selectedIndex] = "replaced text";
HuynhDo
quelle
Sie sollten zuerst überprüfen, ob selectedIndex nicht -1 ist, oder genauer gesagt, dass es> = 0 und <.items.length ist.
Gary
-3

Es sollte funktionieren

Yourcomboboxname.setselecteditem("yourstring");

Und wenn Sie eine Datenbankzeichenfolge festlegen möchten, verwenden Sie diese

Comboboxname.setselecteditem(ps.get string("databasestring"));
Deepak Kumar
quelle