如何在 C# 中将 selectedValue 设置为 Controls.Combobox?
How to set selectedValue to Controls.Combobox in c#?
我有一个组合框,我发现我无法像这样设置 SelectedValue:
cmbA.SelectedValue = "asd"
所以我尝试这样做
cmbA.SelectedIndex = cmbA.FindString("asd");
基于How to set selected value from Combobox?
我意识到我的组合框是 System.Windows.Controls.ComboBox 而不是 System.Windows.Forms.ComboBox。
这意味着 FindString() 不可用。
基于 User Control vs. Windows Form 我知道表单是控件的容器,但我不明白为什么 Controls.ComboBox 没有实现 FindString()。
我是否必须编写自己的代码来完成 FindString() 为 Forms.ComboBox 所做的事情?
我不知道你想做什么,但我认为这样做会更容易
cmbA.Text = "String";
这样你就可以得到你选择的项目
另外,我找到了一篇可以帮助您的有趣文章:
Difference between SelectedItem, SelectedValue and SelectedValuePath
WPF 组合框与 WinForms 的组合框不同。它们可以显示一组对象,而不仅仅是字符串。
假设我有
myComboBox.ItemsSource = new List<string> { "One", "Two", "Three" };
我可以使用下面的代码行来设置 SelectedItem
myComboBox.SelectedItem = "Two";
我们不仅限于这里的字符串。我也可以说我想将我的 ComboBox 绑定到 List<MyCustomClass>
,我想将 ComboBox.SelectedItem
设置为 MyCustomClass
对象。
例如,
List<MyCustomClass> data = new List<MyCustomClass>
{
new MyCustomClass() { Id = 1, Name = "One" },
new MyCustomClass() { Id = 2, Name = "Two" },
new MyCustomClass() { Id = 3, Name = "Three" }
};
myComboBox.ItemsSource = data;
myComboBox.SelectedItem = data[0];
我也可以告诉 WPF 我想考虑 MyCustomClass
上的 Id
属性 作为标识 属性,并且我想设置 MyCombbox.SelectedValue = 2
, 就会知道找到 .Id
属性 为 2 的 MyCustomClass
对象,并将其设置为选中。
myComboBox.SelectedValuePath = "Id";
myComboBox.SelectedValue = 2;
我什至可以使用
将显示文本设置为使用不同的 属性
myComboBox.DisplayMemberPath = "Name";
总而言之,WPF ComboBox 不仅仅可以处理字符串,而且由于扩展的功能,不需要 FindString。您最有可能寻找的是将 SelectedItem
设置为 ItemsSource
集合中存在的对象之一。
如果您不使用 ItemsSource,那么标准的 for-each 循环也应该有效
foreach(ComboBoxItem item in myComboBox.Items)
{
if (item.Content == valueToFind)
myComboBox.SelectedItem = item;
}
我有一个组合框,我发现我无法像这样设置 SelectedValue:
cmbA.SelectedValue = "asd"
所以我尝试这样做
cmbA.SelectedIndex = cmbA.FindString("asd");
基于How to set selected value from Combobox?
我意识到我的组合框是 System.Windows.Controls.ComboBox 而不是 System.Windows.Forms.ComboBox。
这意味着 FindString() 不可用。
基于 User Control vs. Windows Form 我知道表单是控件的容器,但我不明白为什么 Controls.ComboBox 没有实现 FindString()。
我是否必须编写自己的代码来完成 FindString() 为 Forms.ComboBox 所做的事情?
我不知道你想做什么,但我认为这样做会更容易
cmbA.Text = "String";
这样你就可以得到你选择的项目
另外,我找到了一篇可以帮助您的有趣文章: Difference between SelectedItem, SelectedValue and SelectedValuePath
WPF 组合框与 WinForms 的组合框不同。它们可以显示一组对象,而不仅仅是字符串。
假设我有
myComboBox.ItemsSource = new List<string> { "One", "Two", "Three" };
我可以使用下面的代码行来设置 SelectedItem
myComboBox.SelectedItem = "Two";
我们不仅限于这里的字符串。我也可以说我想将我的 ComboBox 绑定到 List<MyCustomClass>
,我想将 ComboBox.SelectedItem
设置为 MyCustomClass
对象。
例如,
List<MyCustomClass> data = new List<MyCustomClass>
{
new MyCustomClass() { Id = 1, Name = "One" },
new MyCustomClass() { Id = 2, Name = "Two" },
new MyCustomClass() { Id = 3, Name = "Three" }
};
myComboBox.ItemsSource = data;
myComboBox.SelectedItem = data[0];
我也可以告诉 WPF 我想考虑 MyCustomClass
上的 Id
属性 作为标识 属性,并且我想设置 MyCombbox.SelectedValue = 2
, 就会知道找到 .Id
属性 为 2 的 MyCustomClass
对象,并将其设置为选中。
myComboBox.SelectedValuePath = "Id";
myComboBox.SelectedValue = 2;
我什至可以使用
将显示文本设置为使用不同的 属性myComboBox.DisplayMemberPath = "Name";
总而言之,WPF ComboBox 不仅仅可以处理字符串,而且由于扩展的功能,不需要 FindString。您最有可能寻找的是将 SelectedItem
设置为 ItemsSource
集合中存在的对象之一。
如果您不使用 ItemsSource,那么标准的 for-each 循环也应该有效
foreach(ComboBoxItem item in myComboBox.Items)
{
if (item.Content == valueToFind)
myComboBox.SelectedItem = item;
}