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"; 
Peter Mortensen
źródło
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")
Norbert B.
źródło
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.

Andrew Kennan
źródło
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.

Spence
źródło
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";
Frederik Gheysels
źródło
18
Nie, to nie jest: msdn.microsoft.com/en-us/library/…
Frederik Gheysels
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;
    }
}
gabore
źródło
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");
Brian Rudolph
źródło
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.

Muhammad Sohail
źródło
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);
Dave
źródło
5
comboBox1.SelectedItem.Text = "test1";
Ben
źródło
4

Załóżmy, że test1, test2, test3 należą do kolekcji comboBox1, a następująca instrukcja będzie działać.

comboBox1.SelectedIndex = 0; 
ihcarp
źródło
To nie zawsze działa ... Zobacz tutaj: stackoverflow.com/questions/12839444/…
JGFMK
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!

Roman Polen.
źródło
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;
}
Jelle Smits
źródło
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.

Megacan
źródło
1
_cmbTemplates.SelectedText = "test1"

albo może

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");
Dziekan
źródło
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.

użytkownik53378
źródło
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");
Amit Bhagat
źródło
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;
    }
}
Jos Roestenberg
źródło
0
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

W twoim przypadku możesz użyć

DropDownList.Items.FindByText("Text");
użytkownik874163
źródło
0
combo.Items.FindByValue("1").Selected = true;
Anderson
źródło
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.

użytkownik3599362
źródło
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;
        }
Monzur
źródło
0

to działa dla mnie .....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];
Jaydeep Karena
źródło
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
-1

Możesz powiedzieć comboBox1.Text = comboBox1.Items[0].ToString();

Nishān Wickramrathna
źródło
-2

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

Combobox1.items[Combobox1.selectedIndex] = "replaced text";
HuynhDo
źródło
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"));
Deepak Kumar
źródło