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

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

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

comboBox1.SelectedText = "test1"; 

как это не работает? Что происходит при запуске этой строки кода?

Kate Gregory 01.07.2014 23:44

@KateGregory просто объединяет строку "test1" с существующим текстом.

solujic 29.11.2016 13:14

Если у вас есть способ узнать значение элемента, вы можете использовать: comboBox1.SelectedValue = Value_of_your_string;

César León 17.01.2017 17:29
SelectedText изменяет текст «Выбрано» на test1. если «Выделение» (выделенный текст) не сделано, текст будет вставлен в позицию курсора.
AaA 29.05.2017 09:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
206
4
664 966
25

Ответы 25

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

comboBox1.SelectedItem = "test1";

Нет, это не так: msdn.microsoft.com/en-us/library/…

Frederik Gheysels 05.03.2010 13:15

Спас день! Выбранный элемент должен соответствовать типу - вот и все! Я чесал в затылке, почему выбранный элемент не был установлен, даже если элемент явно был там - оказалось несоответствие типов!

Sudhanshu Mishra 15.05.2015 05:43

Для полноты полезно иметь описание из приведенной выше ссылки, тем более что этот ответ выполняет проверку соответствия, предложенную другими ответами, включая предпочтительный из @norbertB: Когда вы устанавливаете свойство SelectedItem для объекта, ComboBox пытается сделать этот объект текущим выбранным в списке.Если объект найден в списке, он отображается в области редактирования ComboBox, а для свойства SelectedIndex устанавливается соответствующий индекс. Если объект не существует в списке, свойству SelectedIndex остается текущее значение.

DanG 29.03.2018 23:56
  • Перечислить элементы списка в поле со списком
  • Получить равные listindex set combobox
  • Установите listindex на найденный.

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

Тогда почему вы дали это в качестве ответа?

user1017882 06.08.2015 10:20

У вас нет этого свойства в ComboBox. У вас есть SelectedItem или SelectedIndex. Если у вас есть объекты, которые вы использовали для заполнения поля со списком, вы можете использовать SelectedItem.

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

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

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

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

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

Помните, что его SelectedINDEX not SelectedITEM ... И компилятор не будет жаловаться, просто не сможет установить значение combobox

Rob 31.01.2017 23:16

Разве вы не любите логические ошибки, которые не вызывают никаких исключений, они просто не работают ...

Spence 01.02.2017 02:34

это выбирает элемент, но не вызывает событие onChange в поле со списком

mrid 11.01.2018 14:02
IndexOf вызовет исключение, только если вы передадите ему null. Если просто не найти элемент, он вернет -1 (что удобно для SelectedIndex).
Ben Voigt 02.10.2020 01:57

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

comboBox1.SelectedIndex = 0; 

Это не всегда работает ... Смотрите здесь: stackoverflow.com/questions/12839444/…

JGFMK 05.07.2019 14:44
_cmbTemplates.SelectedText = "test1"

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

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

с помощью этого кода вы назначаете bool свойству SelectedItem ... не будет работать imho.

Frederik Gheysels 16.01.2009 14:11

Это должно помочь:

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

Мне кажется, это лучший ответ, потому что у вас есть возвращаемое значение, которое вы можете временно сохранить в переменной и использовать его, чтобы проверить, нашли ли вы искомое значение.

Áxel Costas Pena 06.05.2014 16:15

что, если в combox1 больше одного значения "test1"

thoitbk 04.01.2015 13:31

@thoitbk - Согласно MSDN на msdn.microsoft.com/en-us/library/…, метод FindStringExact()«Находит первый элемент в поле со списком, соответствующий указанной строке».

dub stylee 22.01.2015 23:30

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

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

Использовать:

comboBox1.SelectedItem = "test1";

или же:

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

comboBox1.Items.IndexOf ... рискует получить исключение NullReferenceException, если Items пуст.

Gary 18.02.2012 00:48

@Gary: Нет, Items всегда будет ненулевой коллекцией, даже если в коллекции нет элементов (Items.Count == 0)

Ben Voigt 02.10.2020 01:54

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

ComboBox1.Text = "test1";

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

Конечно, это просто устанавливает текст в редактируемой области ComboBox, а не выбирает соответствующий элемент из списка? Если коллекция элементов списка содержит объекты, а не просто строки, то я сомневаюсь, что при этом будет выбран соответствующий объект ListItem, скорее он просто установит свойство Text в ComboBox?

TabbyCool 05.01.2010 19:28

Он устанавливает свойство SelectedValue элемента управления

Henryk 05.03.2010 13:08

Хороший. Прекрасно работает с размером шрифта, его жирностью и раскрывающимися списками. Никаких приведений или преобразований между классами. Оооочень проще!

Lance Cleveland 09.05.2011 01:48

На всякий случай: этот параметр нужно устанавливать только после заполнения поля со списком.

Antoine Rodriguez 14.10.2012 22:45

нет. текста в silverlight.

Syaiful Nizam Yahya 10.01.2013 17:05

Не работает, если ComboBox .DropDownStyle = ComboBoxStyle.DropDownList;

Jayant Varshney 21.12.2013 11:34

Я искал, как установить поле со списком, и думал, что это будет довольно запутанный процесс, но это помогает!

user 06.03.2014 21:12

Мой стиль выпадающего списка со списком - DropDownList, и .Text = "some text" не работает. Это решение сработало для меня: Combox1.SelectedIndex = Combox1.FindStringExact ("test1")

Mayank 02.04.2014 08:26

Для меня это сработало только:

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

Это сработало для меня, но вам нужно быть осторожным, чтобы элементы в вашем ComboBox на самом деле были элементами ComboBox, поскольку можно также поместить туда другие элементы.

Grant 30.09.2013 08:10

Это отлично работало в WinRT 8.1. Я фактически обернул верхний foreach в метод расширения, подобный тому, что Дэйв написал в своем решении SelectItemByValue (), и это было действительно идеальное решение.

Speednet 21.05.2015 18:57

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

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

Вы должны сначала убедиться, что selectedIndex не равен -1, а точнее, что это> = 0 и <.items.length.

Gary 18.02.2012 00:50
comboBox1.SelectedItem.Text = "test1";

Я заполнил свой ComboBox een DataTable, заполненным из базы данных. Затем я установил DisplayMember и ValueMember. И я использую этот код для установки выбранного элемента.

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

Большое спасибо.

Biddut 27.07.2020 12:31

Это решение основано на 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;
    }
    

Надеюсь, я помог!

  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

В вашем случае вы можете использовать

DropDownList.Items.FindByText("Text");
combo.Items.FindByValue("1").Selected = true;

Это также может привести к исключению, если «1» не найдена.

Gary 18.02.2012 00:49

Я использовал метод расширения:

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

Я использовал KeyValuePair для привязки данных ComboBox, и я хотел найти элемент по значение, поэтому в моем случае это сработало:

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

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

Yourcomboboxname.setselecteditem("yourstring");

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

Comboboxname.setselecteditem(ps.get string("databasestring"));

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

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

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

Можно сказать comboBox1.Text = comboBox1.Items[0].ToString();

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

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

Хотя этот код может дать ответ на вопрос, лучше объяснить, как решить проблему, и предоставить код в качестве примера или справки. Ответы только на коде могут сбивать с толку и не иметь контекста.

Robert Columbia 31.05.2018 15:17

Спасибо за совет!

Jaydeep Karena 01.06.2018 11:55
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

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

Найдите mySecondObject (типа MyObject) в поле со списком (содержащем список MyObject) и выберите элемент:

foreach (MyObject item in comboBox.Items)
{
   if (item.NameOrID == mySecondObject.NameOrID)
    {
        comboBox.SelectedItem = item;
        break;
    }
}

Другие вопросы по теме