Как установить выбранный элемент в поле со списком, чтобы соответствовать моей строке с помощью C #?

197

У меня есть строка «test1» и мое COMBOBOX содержит test1, test2и test3. Как установить для выбранного элемента значение «test1»? То есть как мне сопоставить мою строку с одним из элементов comboBox?

Я думал о строке ниже, но это не работает.

comboBox1.SelectedText = "test1"; 
Питер Мортенсен
источник
как это не работает? Что происходит при запуске этой строки кода?
Кейт Грегори
@KateGregory просто объединяет строку «test1» с существующим текстом
solujic
Если у вас есть способ узнать значение элемента, вы можете использовать: comboBox1.SelectedValue = Value_of_your_string;
Сезар Леон
SelectedTextизменяет выбранный текст на test1. если «Выбор» (выделенный текст) не сделан, текст будет вставлен в позицию каретки.
AaA

Ответы:

278

Это должно сделать трюк:

Combox1.SelectedIndex = Combox1.FindStringExact("test1")
Норберт Б.
источник
Мне кажется, это лучший ответ, потому что у вас есть возвращаемое значение, вы можете сохранить временное значение в переменной и использовать его для проверки, нашли ли вы искомое значение.
Аксель Костас Пена
Что, если в combox1 имеется более одного значения «test1»
thoitbk
@thoitbk - Согласно MSDN по адресу msdn.microsoft.com/en-us/library/… , метод FindStringExact() «Находит первый элемент в поле со списком, соответствующий указанной строке».
даб стайл
207

Вы пробовали свойство Text ? Меня устраивает.

ComboBox1.Text = "test1";

Свойство SelectedText предназначено для выбранной части редактируемого текста в части текстового поля комбинированного окна.

Эндрю Кеннан
источник
7
Разве это просто устанавливает текст в редактируемой области ComboBox, а не выбирает соответствующий элемент из списка? Если коллекция элементов списка содержит объекты, а не только строки, то я сомневаюсь, что это выберет соответствующий объект ListItem, а просто установит свойство Text в ComboBox?
TabbyCool
9
Он устанавливает свойство SelectedValue элемента управления
Henryk
Ницца. Прекрасно работает для размера шрифта, веса и семейных выпадающих. Нет приведения или преобразования между классами. Тааак намного проще!
Ланс Кливленд
3
На всякий случай: этот параметр должен быть установлен только после заполнения поля со списком.
Антуан Родригес
12
Мой выпадающий стиль в выпадающем списке - DropDownList, и .Text = "некоторый текст" не работает. Это решение отлично сработало для меня: Combox1.SelectedIndex = Combox1.FindStringExact ("test1")
Mayank,
48

Предполагая, что ваш комбинированный список не связан с данными, вам нужно будет найти индекс объекта в коллекции «items» в вашей форме, а затем установить для свойства selectedindex соответствующий индекс.

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

Помните, что функция IndexOf может выдавать исключение аргумента, если элемент не найден.

кладовая для продуктов
источник
1
Помните, что SelectedINDEX не SelectedITEM ... И компилятор не будет жаловаться, просто не сможет установить значение в
Rob
Разве вы не любите логические ошибки, которые не выдают никаких исключений, они просто не работают ...
Спенс
это выбирает элемент, но не вызывает событие onChange в выпадающем списке
mrid
39

Если элементы в вашем ComboBox являются строками, вы можете попробовать:

comboBox1.SelectedItem = "test1";
Фредерик Гейсель
источник
18
Нет, это не так: msdn.microsoft.com/en-us/library/…
Фредерик Гейселс
Спас день! Выбранный предмет должен соответствовать типу - это было для меня! Я чесал голову, почему выбранный элемент не был установлен, даже если элемент был явно там - оказалось, что несоответствие типов!
Судханшу Мишра
Для полноты, полезно иметь описание по вышеуказанной ссылке, тем более что этот ответ выполняет проверку соответствия, предложенную другими ответами, включая предпочтительный из @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;
    }
}
gabore
источник
2
Это сработало для меня, но вы должны быть осторожны, так как элементы в вашем ComboBox на самом деле являются ComboBoxItems, так как есть возможность добавлять и другие элементы.
Грант
Это прекрасно работало в WinRT 8.1. Я фактически обернул верхний foreach в метод расширения, как написал Дейв в его решении SelectItemByValue (), и это было действительно идеальное решение.
Спиднет
9

SelectedText предназначен для получения или установки фактического текста в редакторе строк для выбранного элемента в выпадающем списке, как описано здесь . Это будет недоступно для редактирования, если вы установите:

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

Использование:

comboBox1.SelectedItem = "test1";

или:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");
Брайан Рудольф
источник
1
comboBox1.Items.IndexOf ... рискует исключением NullReferenceException, если Items пуст.
Гэри
9
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Попробуйте это в Windows Form.

Мухаммед Сохаил
источник
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

Предположим, что test1, test2, test3 принадлежат коллекции comboBox1, и следующий оператор будет работать.

comboBox1.SelectedIndex = 0; 
ihcarp
источник
Это не всегда работает ... См. Здесь: stackoverflow.com/questions/12839444/…
JGFMK
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.

Если нет, вы можете получить коллекцию элементов (свойство Items) и выполнять итерацию до тех пор, пока не получите нужное значение и не использовать его с другими свойствами.

Надеюсь, поможет.

Megacan
источник
1
_cmbTemplates.SelectedText = "test1"

или, может быть

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");
декан
источник
с помощью этого кода вы назначаете bool свойству SelectedItem ... не работает imho.
Фредерик Гейселс
1
  • Перечислять ListItems в выпадающем списке
  • Получите равные списки
  • Установите listindex для найденного.

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

user53378
источник
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");
user874163
источник
0
combo.Items.FindByValue("1").Selected = true;
Андерсон
источник
3
Это также рискует исключением, если «1» не найден.
Гэри
0

Все методы, приемы и строки настройки кода элемента ComboBox не будут работать, пока у ComboBox не будет родительского элемента.

user3599362
источник
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;
        }
Monzur
источник
0

это работает для меня .....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];
Джейдип Карена
источник
1
Хотя этот код может ответить на вопрос, лучше объяснить, как решить проблему, и предоставить код в качестве примера или ссылки. Ответы только на код могут быть запутанными и лишены контекста.
Роберт Колумбия
Спасибо за совет!
Джейдип Карена
-1

Ты можешь сказать comboBox1.Text = comboBox1.Items[0].ToString();

Нишан Викрамратна
источник
-2

Пожалуйста, попробуйте этот способ, он работает для меня:

Combobox1.items[Combobox1.selectedIndex] = "replaced text";
HuynhDo
источник
Вы должны проверить, что selectedIndex не -1 в первую очередь, или точнее, что это> = 0 и <.items.length.
Гэри
-3

Он должен работать

Yourcomboboxname.setselecteditem("yourstring");

И если вы хотите установить строку базы данных, используйте эту

Comboboxname.setselecteditem(ps.get string("databasestring"));
Дипак Кумар
источник