Як встановити вибраний елемент у comboBox відповідно до мого рядка за допомогою C #?


197

У мене є рядок «test1» і моє COMBOBOX містить test1, test2і test3. Як встановити вибраний елемент на "test1"? Тобто, як я можу відповідати рядок одному із елементів comboBox?

Я думав про рядок нижче, але це не працює.

comboBox1.SelectedText = "test1"; 

як це не працює? Що відбувається при запуску цього рядка коду?
— Кейт Григорій

@KateGregory він просто поєднує рядок "test1" з існуючим текстом
— solujic

Якщо у вас є спосіб дізнатися значення елемента, ви можете використовувати: comboBox1.SelectedValue = Value_of_your_string;
— Сезар Леон

SelectedTextзмінює текст "Вибраний" на тест1. якщо не зроблено "Виділення" (позначений текст), текст буде вставлений у позицію каретки.
— AaA

Відповіді:


278

Для цього слід зробити фокус:

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

Кращою відповіддю для мене є те, що у вас є повернене значення, яке ви можете зберегти тимчасово у змінній та використовувати його для перевірки того, чи знайшли ви шукане значення.
— Аксель Костас Пена

що робити, якщо в combox1 є більше одного значення "test1"
— thoitbk

@thoitbk - За даними MSDN за адресою msdn.microsoft.com/en-us/library/… , метод FindStringExact() "Знаходить перший елемент у комбінованому полі, що відповідає вказаному рядку."
— dub stylee

207

Ви спробували властивість Text ? Це працює для мене.

ComboBox1.Text = "test1";

Властивість SelectedText призначена для обраної частини редагованого тексту в текстовій частині поля комбо.


7
Напевно, це просто встановлює текст у області редагування ComboBox, а не вибирає відповідний елемент зі списку? Якщо колекція елементів списку містить об'єкти, а не просто рядки, то я сумніваюся, що це обрало б відповідний об’єкт ListItem, а це просто встановило б властивість Text на ComboBox?
— TabbyCool

9
Він встановлює властивість SelectedValue управління
— Генрік

Приємно. Чудово працює для розміру шрифту, ваги та сімейного сканування. Ніяких каст або перетворень між класами. Soooo набагато простіше!
— Ленс Клівленд

3
Про всяк випадок: Цей параметр потрібно встановити лише після заповнення комбінованого поля.
— Антуан Родрігес

12
Мій спадний стиль комбобоксу - DropDownList, і .Text = "деякий текст" не працює. Це рішення працювало нормально для мене: Combox1.SelectedIndex = Combox1.FindStringExact ( "test1")
— Mayank

48

Якщо припустити, що ваш комбобокс не пов’язаний з даними, вам потрібно буде знайти індекс об'єкта у колекції "items" на вашій формі, а потім встановити властивість "selectedindex" у відповідний індекс.

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

Майте на увазі, що функція IndexOf може кидати аргументексцепцію, якщо елемент не знайдено.


1
Пам'ятайте, що його вибраний INDEX не вибранийITEM ... І компілятор не поскаржиться, просто не встановіть значення комбобоксу
— Роб

Чи не любите ви логічні помилки, які не кидають жодного винятку, вони просто не працюють ...
— Спенс

це вибір елемента, але не виклик події onChange на
— комбобоксі

39

Якщо елементи вашого ComboBox є рядками, ви можете спробувати:

comboBox1.SelectedItem = "test1";


Врятував день! Вибраний елемент повинен відповідати типу - це було для мене! Я чухав голову, чому вибраний елемент не був встановлений, навіть предмет явно був там - виявився невідповідність типу!
— Sudhanshu Mishra

Для повноти корисно мати опис із наведеного вище посилання, тим більше, що ця відповідь виконує перевірку відповідності, запропоновану іншими відповідями, включаючи кращі від @norbertB: Коли ви встановлюєте об’єкт властивість SelectedItem, ComboBox намагається зробити цей об’єкт поточно вибраний у списку. Якщо об’єкт знайдений у списку , він відображається у частині редагування ComboBox і властивість SelectedIndex встановлюється у відповідний індекс. Якщо об'єкта не існує в списку, властивість SelectedIndex залишається за його поточним значенням.
— DanG

10

Для мене це працювало лише:

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

MOD: і якщо у вас є власні об’єкти як елементи, встановлені в комбобоксі, замініть ComboBoxItem одним з них, як:

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

2
Це працювало для мене, але потрібно бути обережним, що елементи у вашому ComboBox насправді є ComboBoxItems, оскільки там можна помістити й інші елементи.
— Грант

Це добре спрацювало в WinRT 8.1. Я насправді обернув верхнього передбачення в метод розширення, як Дейв написав у своєму рішенні SelectItemByValue (), і це було дійсно ідеальне рішення.
— Speednet

9

SelectedText - це отримання або встановлення фактичного тексту в редакторі рядків для вибраного елемента в комбінаційному вікні, як тут задокументовано . Це не змінюється, якщо встановити:

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

Використання:

comboBox1.SelectedItem = "test1";

або:

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

1
comboBox1.Items.IndexOf ... ризикує NullReferenceException, якщо Пункти порожні.
— Гері


7

Я використовував метод розширення:

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

Тоді просто споживайте метод:

ddl.SelectItemByValue(value);



4

Це рішення засноване на MSDN з деякими внесеними вами модифікаціями.

  • Він знаходить точне або ЧАСТЬ рядка і встановлює його.

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

Сподіваюся, я допоміг!


3

Я заповнив свій ComboBox een DataTable, заповнений з бази даних. Потім я встановив DisplayMember і ValueMember. І я використовую цей код для встановлення вибраного елемента.

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

1

У вас немає цього властивості в ComboBox. У вас є SelectedItem або SelectedIndex. Якщо у вас є об'єкти, які ви використовували для заповнення комбінованого поля, ви можете використовувати SelectedItem.

Якщо ні, ви можете отримати колекцію предметів (Елементи властивості) і повторіть це, поки не отримаєте потрібне значення і використайте це з іншими властивостями.

сподіваюся, що це допомагає.


1
_cmbTemplates.SelectedText = "test1"

або можливо

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

за допомогою цього коду ви призначаєте bool властивості SelectedItem ... не буде працювати imho.
— Фредерік Гейсельс

1
  • Перерахуйте ListItems у списку
  • Отримайте рівні списки списку встановлених списків
  • Встановіть listindex на знайдений.

Але якщо я бачу такий код як рецензент коду, рекомендую переглянути весь алгоритм методу.


2
Чому ви надали це як відповідь тоді?

1

Я використовував KeyValuePair для прив'язки даних ComboBox, і хотів знайти предмет за значенням, щоб це працювало в моєму випадку:

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

1

Знайдіть mySecondObject (типу MyObject) у комбінованій коробці (містить список MyObjects) та виберіть елемент:

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

Для вашого випадку ви можете використовувати

DropDownList.Items.FindByText("Text");


0

Усі методи, хитрощі та рядки встановлення коду елемента ComboBox не працюватимуть, поки у ComboBox не з’явиться батько.


0

Я створив функцію, яка поверне індекс значення

        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

це працює для мене .....

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

1
Хоча цей код може відповісти на питання, краще пояснити, як вирішити проблему, та надати код як приклад чи посилання. Відповіді, що стосуються лише коду, можуть бути заплутаними та відсутністю контексту.
— Роберт Колумбія

Дякую за пораду!
— Jaydeep Karena


-2

Спробуйте, таким чином, це працює для мене:

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

Ви повинні перевірити, чи вибрано selectIndex не першим -1, а точніше, що це> = 0 і <.items.length.
— Гері

-3

Це має працювати

Yourcomboboxname.setselecteditem("yourstring");

І якщо ви хочете встановити рядок бази даних, використовуйте це

Comboboxname.setselecteditem(ps.get string("databasestring"));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.