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"; 

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")

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.


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.


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";


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;
    }
}

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");

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.


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);

5
comboBox1.SelectedItem.Text = "test1";


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!


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;
}

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.


1
_cmbTemplates.SelectedText = "test1"

oder vielleicht

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");

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.


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");

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;
    }
}

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");

0
combo.Items.FindByValue("1").Selected = true;

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.


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;
        }

0

das funktioniert bei mir .....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];

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


-2

Bitte versuchen Sie es so, es funktioniert bei mir:

Combobox1.items[Combobox1.selectedIndex] = "replaced text";

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"));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.