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.