Як встановити вибраний елемент у 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.