Jak ustawić wybrany element w comboBox, aby dopasować mój ciąg za pomocą C #?


197

Mam ciąg „test1” i moje ComboBox zawiera test1, test2oraz test3. Jak ustawić wybrany element na „test1”? To znaczy, jak dopasować mój ciąg do jednego z elementów comboBox?

Myślałem o poniższej linii, ale to nie działa.

comboBox1.SelectedText = "test1"; 

jak to nie działa Co się stanie, gdy uruchomi się ten wiersz kodu?
— Kate Gregory

@KateGregory po prostu łączy ciąg „test1” z istniejącym tekstem
— solujic

Jeśli masz sposób na poznanie wartości elementu, możesz użyć: comboBox1.SelectedValue = Wartość_łańcucha;
— César León

SelectedTextzmienia tekst „Wybrany” na test1. jeżeli nie zostanie dokonany „Wybór” (zaznaczony tekst), tekst zostanie wstawiony w pozycji karetki.
— AaA

Odpowiedzi:


278

To powinno załatwić sprawę:

Combox1.SelectedIndex = Combox1.FindStringExact("test1")

Wydaje mi się lepszą odpowiedzią, ponieważ masz wartość zwracaną, którą możesz zapisać tymczasowo w zmiennej i użyć jej do sprawdzenia, czy znalazłeś szukaną wartość.
— Áxel Costas Pena

co jeśli w combox1 jest więcej niż jedna wartość „test1”
— thoitbk

@thoitbk - Według MSDN pod adresem msdn.microsoft.com/en-us/library/… metoda FindStringExact() „Znajduje pierwszy element w polu kombi, który pasuje do podanego ciągu”.
— dub stylee

207

Czy wypróbowałeś już właściwość Text ? Mi to pasuje.

ComboBox1.Text = "test1";

Właściwość SelectedText dotyczy wybranej części edytowalnego tekstu w części pola tekstowego pola kombi.


7
Z pewnością to tylko ustawia tekst w edytowalnym obszarze ComboBox zamiast wybierać odpowiedni element z listy? Jeśli kolekcja elementów listy zawiera obiekty, a nie tylko ciągi, to wątpię, czy wybrałby odpowiedni obiekt ListItem, a raczej ustawiłby właściwość Text na ComboBox?
— TabbyCool,

9
To ustawia właściwość SelectedValue kontrolki
— Henryk

Miły. Działa pięknie w przypadku rozmiaru, wagi i menu rozwijanego rodziny. Brak rzutów i konwersji między klasami. Soooo o wiele łatwiej!
— Lance Cleveland,

3
Na wszelki wypadek: Ten parametr należy ustawić dopiero po zapełnieniu pola combobox.
— Antoine Rodriguez

12
Mój styl rozwijany combobox to DropDownList i .Text = „jakiś tekst” nie działa. To rozwiązanie działało dla mnie dobrze: Combox1.SelectedIndex = Combox1.FindStringExact („test1”)
— Mayank

48

Zakładając, że twój combobox nie jest obszarem danych, musisz znaleźć indeks obiektu w kolekcji „items” w formularzu, a następnie ustawić właściwość „selectedindex” na odpowiedni indeks.

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

Należy pamiętać, że funkcja IndexOf może zgłosić wyjątek argumentu, jeśli element nie zostanie znaleziony.


1
Zapamiętaj jego SelectedINDEX nie SelectedITEM ... A kompilator nie narzeka, po prostu nie ustawia wartości combobox
— Rob

Nie lubisz błędów logicznych, które nie rzucają żadnych wyjątków, po prostu nie działają ...
— Spence

oznacza to wybranie elementu, ale nie wywoływanie zdarzenia onChange w combobox
— mrid

39

Jeśli elementy w ComboBox są ciągami znaków, możesz spróbować:

comboBox1.SelectedItem = "test1";


Ocalił dzień! Wybrany element musi pasować do typu - to było dla mnie! Drapałem się po głowie, dlaczego wybrany element nie został ustawiony, nawet ten element był wyraźnie widoczny - okazało się, że to niedopasowanie typu!
— Sudhanshu Mishra

Dla kompletności przydatne jest posiadanie opisu z powyższego łącza, zwłaszcza, że ​​ta odpowiedź wykonuje sprawdzenie dopasowania sugerowane przez inne odpowiedzi, w tym preferowane z @norbertB: Po ustawieniu właściwości SelectedItem na obiekt ComboBox próbuje utworzyć ten obiekt aktualnie wybrany na liście. Jeśli obiekt zostanie znaleziony na liście , zostanie wyświetlony w części edycyjnej ComboBox, a właściwość SelectedIndex zostanie ustawiona na odpowiedni indeks. Jeśli obiekt nie istnieje na liście, właściwość SelectedIndex pozostawia swoją bieżącą wartość.
— DanG

10

Dla mnie to działało tylko:

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

MOD: a jeśli masz własne obiekty jako elementy ustawione w combobox, zastąp ComboBoxItem jednym z nich, takim jak:

foreach (Debitor d in debitorCombo.Items)
{
    if (d.Name == "Chuck Norris")
    {
        debitorCombo.SelectedItem = d;
        break;
    }
}

2
To działało dla mnie, ale musisz uważać, aby elementy w twoim ComboBoxie były w rzeczywistości ComboBoxItems, ponieważ można tam również umieścić inne elementy.
— Grant

Działa to świetnie w WinRT 8.1. Tak naprawdę owinąłem górny foreach metodą rozszerzenia, jak napisał Dave w swoim rozwiązaniu SelectItemByValue (), i było to naprawdę idealne rozwiązanie.
— Speednet

9

SelectedText ma pobrać lub ustawić rzeczywisty tekst w edytorze ciągów dla wybranego elementu w comboboxie, jak to tutaj udokumentowano . Nie można tego zmienić, jeśli ustawisz:

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

Posługiwać się:

comboBox1.SelectedItem = "test1";

lub:

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

1
comboBox1.Items.IndexOf ... ryzykuje wyjątek NullReferenceException, jeśli elementy są puste.
— Gary

9
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Wypróbuj to w formularzu Windows.


7

Użyłem metody rozszerzenia:

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

Następnie skorzystaj z metody:

ddl.SelectItemByValue(value);



4

To rozwiązanie jest oparte na MSDN z pewnymi modyfikacjami, które wprowadziłem.

  • Znajduje dokładny lub CZĘŚĆ łańcucha i ustawia go.

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

Mam nadzieję, że pomogłem!


3

Wypełniłem mój ComboBox een DataTable wypełniony z bazy danych. Następnie ustawiłem DisplayMember i ValueMember. I używam tego kodu, aby ustawić wybrany element.

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

1

Nie masz tej właściwości w ComboBox. Masz SelectedItem lub SelectedIndex. Jeśli masz obiekty użyte do wypełnienia pola kombi, możesz użyć SelectedItem.

Jeśli nie, możesz uzyskać kolekcję przedmiotów (przedmioty Przedmioty) i iterować to, dopóki nie uzyskasz pożądanej wartości i użyć jej z innymi właściwościami.

mam nadzieję, że to pomoże.


1
_cmbTemplates.SelectedText = "test1"

albo może

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

z tym kodem przypisujesz bool do właściwości SelectedItem ... nie będzie działać imho.
— Frederik Gheysels

1
  • Wylicz ListItems w combobox
  • Zdobądź równy zestaw listindex zestaw combobox
  • Ustaw listindex na znaleziony.

Ale jeśli widzę taki kod jako recenzenta kodu, poleciłbym ponownie rozważyć cały algorytm metody.


2
Dlaczego więc podałeś to jako odpowiedź?

1

Użyłem KeyValuePair do powiązania danych ComboBox i chciałem znaleźć pozycję według wartości, więc zadziałało to w moim przypadku:

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

1

Znajdź mySecondObject (typu MyObject) w combobox (zawierającym listę MyObjects) i wybierz element:

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

W twoim przypadku możesz użyć

DropDownList.Items.FindByText("Text");

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

3
Grozi to również wyjątkiem, jeśli nie zostanie znalezione „1”.
— Gary

0

Wszystkie metody, triki i linie ustawienia kodu Element ComboBox nie będzie działał, dopóki ComboBox nie będzie miał elementu nadrzędnego.


0

Utworzyłem funkcję, która zwróci Indeks wartości

        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

to działa dla mnie .....

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

1
Chociaż ten kod może odpowiedzieć na pytanie, lepiej wyjaśnić, jak rozwiązać problem i podać kod jako przykład lub odniesienie. Odpowiedzi zawierające tylko kod mogą być mylące i pozbawione kontekstu.
— Robert Columbia

Dzięki za radę!
— Jaydeep Karena


-2

Proszę spróbować w ten sposób, działa dla mnie:

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

Powinieneś sprawdzić, czy selectedIndex nie jest najpierw -1, a ściślej:> = 0 i <.items.length.
— Gary

-3

To powinno działać

Yourcomboboxname.setselecteditem("yourstring");

A jeśli chcesz ustawić ciąg bazy danych, użyj tego

Comboboxname.setselecteditem(ps.get string("databasestring"));
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.