我有一个包含ComboBox的WinForms应用程序。我想根据其值以编程方式选择一个项目。
我尝试使用IndexOf
但它需要整个对象,我只想按值来做。 Items
ObjectCollection
,我不能使用它Linq
(或者不知道如何(。
在一个地方,我像这样设置它的源代码:
private void SetItems()
{
var items = new List<ComboItem>(3);
//Add items to the list
combo.BeginUpdate();
combo.DataSource = items;
combo.ValueMember = "Value";
combo.DisplayMember = "Name";
combo.EndUpdate();
}
private class ComboItem
{
public int Value { get; set; }
public string Name { get; set; }
}
然后(在其他地方(我想根据值设置所选项目。 例如,如果我有组合值:
"Option1": 2,
"Option2": 5,
"Option3": 10
我想做这样的事情:
combo.Items.SelectedValue = 5
并在组合中选择Option2
.甚至可能吗?
1( 为 ComboBox
设置 DataSource
和 ValueMember
时,要选择特定值,请使用SelectedValue
属性。
示例 - 分配选定值
comboBox1.SelectedValue = 5;
2(当ComboBox
的所有项目都是T
类型时,您可以使用ComboBox.Items.Cast<T>()
将其分配给SelectedItem
在项目之间进行搜索。
示例 - 使用 ComboBox.Items 进行搜索
由于ComboBox
的所有项目都属于 T
类型,因此可以使用 linq Cast<T>
将ObjectCollection
强制转换为IEnumerable<T>
。例如:
comboBox1.SelectedItem = comboBox1.Items.Cast<ComboItem>()
.Where(x => x.Value == 5).FirstOrDefault();
记得添加 using System.Linq;
.