У меня есть строка «test1», и мой comboBox содержит test1, test2 и test3. Как установить для выбранного элемента значение «test1»? То есть как сопоставить мою строку с одним из элементов comboBox?
Я думал о строке ниже, но это не работает.
comboBox1.SelectedText = "test1";
@KateGregory просто объединяет строку "test1" с существующим текстом.
Если у вас есть способ узнать значение элемента, вы можете использовать: comboBox1.SelectedValue = Value_of_your_string;
SelectedText изменяет текст «Выбрано» на test1. если «Выделение» (выделенный текст) не сделано, текст будет вставлен в позицию курсора.





Если элементы в вашем ComboBox являются строками, вы можете попробовать:
comboBox1.SelectedItem = "test1";
Нет, это не так: msdn.microsoft.com/en-us/library/…
Спас день! Выбранный элемент должен соответствовать типу - вот и все! Я чесал в затылке, почему выбранный элемент не был установлен, даже если элемент явно был там - оказалось несоответствие типов!
Для полноты полезно иметь описание из приведенной выше ссылки, тем более что этот ответ выполняет проверку соответствия, предложенную другими ответами, включая предпочтительный из @norbertB: Когда вы устанавливаете свойство SelectedItem для объекта, ComboBox пытается сделать этот объект текущим выбранным в списке.Если объект найден в списке, он отображается в области редактирования ComboBox, а для свойства SelectedIndex устанавливается соответствующий индекс. Если объект не существует в списке, свойству SelectedIndex остается текущее значение.
Но если я увижу такой код как рецензент, рекомендую пересмотреть весь алгоритм метода.
Тогда почему вы дали это в качестве ответа?
У вас нет этого свойства в ComboBox. У вас есть SelectedItem или SelectedIndex. Если у вас есть объекты, которые вы использовали для заполнения поля со списком, вы можете использовать SelectedItem.
Если нет, вы можете получить коллекцию элементов (элементы свойств) и выполнять итерацию, пока не получите желаемое значение, и использовать его с другими свойствами.
Надеюсь, поможет.
Предполагая, что ваше поле со списком не привязано к данным, вам нужно будет найти индекс объекта в коллекции «items» в вашей форме, а затем установить для свойства «selectedindex» соответствующий индекс.
comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");
Имейте в виду, что функция IndexOf может выдать исключение аргумента, если элемент не найден.
Помните, что его SelectedINDEX not SelectedITEM ... И компилятор не будет жаловаться, просто не сможет установить значение combobox
Разве вы не любите логические ошибки, которые не вызывают никаких исключений, они просто не работают ...
это выбирает элемент, но не вызывает событие onChange в поле со списком
IndexOf вызовет исключение, только если вы передадите ему null. Если просто не найти элемент, он вернет -1 (что удобно для SelectedIndex).
Предположим, что test1, test2, test3 принадлежат коллекции comboBox1, следующий оператор будет работать.
comboBox1.SelectedIndex = 0;
Это не всегда работает ... Смотрите здесь: stackoverflow.com/questions/12839444/…
_cmbTemplates.SelectedText = "test1"
или, может быть
_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");
с помощью этого кода вы назначаете bool свойству SelectedItem ... не будет работать imho.
Это должно помочь:
Combox1.SelectedIndex = Combox1.FindStringExact("test1")
Мне кажется, это лучший ответ, потому что у вас есть возвращаемое значение, которое вы можете временно сохранить в переменной и использовать его, чтобы проверить, нашли ли вы искомое значение.
что, если в combox1 больше одного значения "test1"
@thoitbk - Согласно MSDN на msdn.microsoft.com/en-us/library/…, метод FindStringExact()«Находит первый элемент в поле со списком, соответствующий указанной строке».
SelectedText предназначен для получения или установки фактического текста в редакторе строк для выбранного элемента в поле со списком, как задокументировано здесь. Это станет недоступным для редактирования, если вы установите:
comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
Использовать:
comboBox1.SelectedItem = "test1";
или же:
comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");
comboBox1.Items.IndexOf ... рискует получить исключение NullReferenceException, если Items пуст.
@Gary: Нет, Items всегда будет ненулевой коллекцией, даже если в коллекции нет элементов (Items.Count == 0)
Вы пробовали свойство Текст? Меня устраивает.
ComboBox1.Text = "test1";
Свойство SelectedText предназначено для выбранной части редактируемого текста в части текстового поля поля со списком.
Конечно, это просто устанавливает текст в редактируемой области ComboBox, а не выбирает соответствующий элемент из списка? Если коллекция элементов списка содержит объекты, а не просто строки, то я сомневаюсь, что при этом будет выбран соответствующий объект ListItem, скорее он просто установит свойство Text в ComboBox?
Он устанавливает свойство SelectedValue элемента управления
Хороший. Прекрасно работает с размером шрифта, его жирностью и раскрывающимися списками. Никаких приведений или преобразований между классами. Оооочень проще!
На всякий случай: этот параметр нужно устанавливать только после заполнения поля со списком.
нет. текста в silverlight.
Не работает, если ComboBox .DropDownStyle = ComboBoxStyle.DropDownList;
Я искал, как установить поле со списком, и думал, что это будет довольно запутанный процесс, но это помогает!
Мой стиль выпадающего списка со списком - DropDownList, и .Text = "some text" не работает. Это решение сработало для меня: Combox1.SelectedIndex = Combox1.FindStringExact ("test1")
Для меня это сработало только:
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, поскольку можно также поместить туда другие элементы.
Это отлично работало в WinRT 8.1. Я фактически обернул верхний foreach в метод расширения, подобный тому, что Дэйв написал в своем решении SelectItemByValue (), и это было действительно идеальное решение.
Пожалуйста, попробуйте этот способ, у меня это работает:
Combobox1.items[Combobox1.selectedIndex] = "replaced text";
Вы должны сначала убедиться, что selectedIndex не равен -1, а точнее, что это> = 0 и <.items.length.
comboBox1.SelectedItem.Text = "test1";
Я заполнил свой ComboBox een DataTable, заполненным из базы данных. Затем я установил DisplayMember и ValueMember. И я использую этот код для установки выбранного элемента.
foreach (DataRowView Row in ComboBox1.Items)
{
if (Row["ColumnName"].ToString() == "Value") ComboBox1.SelectedItem = Row;
}
Большое спасибо.
Это решение основано на 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» не найдена.
Я использовал метод расширения:
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"];
Хотя этот код может дать ответ на вопрос, лучше объяснить, как решить проблему, и предоставить код в качестве примера или справки. Ответы только на коде могут сбивать с толку и не иметь контекста.
Спасибо за совет!
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;
}
}
как это не работает? Что происходит при запуске этой строки кода?