如何在窗口窗体中访问组合框项成员值
本文关键字:组合 成员 访问 窗口 窗体 | 更新日期: 2023-09-27 18:17:34
我正在尝试访问组合框项的值。项的值为 MyClass 类型
List<MyClass> myIitemsList = getMyClassItemsMethod();
if (myIitemsList .Count > 0)
{
for (int i = 0; i < myIitemsList .Count; i++)
{
List<MyClass> selectedMyClassItems = myIitemsList .FindAll(x => x.myClassNumber == i);
string itemtext = "MyClass " + i ;
myComboBox.Items.Add(new { itemtext, ValueMember = selectedMyClassItems});
}
}
这是我的示例代码。现在我正在尝试访问价值成员。当我在组合框中选择一个项目时,我能够获得所选项目。
var ddlMyClassSelectedItem = myComboBox.SelectedItem;
在调试监视 windo 中,我能够看到该项目的 ValueMember 将项目作为列表,但我不知道如何访问/检索它们。
让我们讨论一下你做了什么。如何检索成员并不感兴趣,尽管您可以这样做
myComboBox.DisplayMemeber = "Display";
myComboBox.ValueMemeber = "Value";
myComboBox.DataSource =
getMyClassItemsMethod().OrderBy(c => c.myClassNumber).
Select(c => new { Display = "Memeber: " + c.myClassNumber, Value = c}).ToList();
它将起作用,现在您已使用 myComboBox.SelectedItem
选择一个项目。但是您遇到了一个问题,即您的项目实际上是匿名类型,您无法轻松转换它。
关于这一点,你为什么不声明一个像
class ComboItem
{
public string Display {get; set;}
public MyClass Value {get; set;}
}
并且使用此类型而不是匿名类型,即代替new {...}
,您new ComboItem {...}
。现在,这很容易
var ddlMyClassSelectedItem = (ComboItem)myComboBox.SelectedItem;
Console.WriteLine(ddlMyClassSelectedItem.Value.myClassNumber);
现在您知道ddlMyClassSelectedItem
属于ComboItem
类型
List<MyClass> myIitemsList = getMyClassItemsMethod();
if (myIitemsList .Count > 0)
{
for (int i = 0; i < myIitemsList .Count; i++)
{
List<MyClass> selectedMyClassItems = myIitemsList .FindAll(x => x.myClassNumber == i);
string itemtext = "MyClass " + i ;
myComboBox.Items.Add(new KeyValuePair<string, List<SwitchPort>>(itemtext,
selectedMyClassItems);
}
}
然后从所选项目中检索值。
var item = myComboBox.SelectedItem;
KeyValuePair<string,List<MyClass>> selectedItemsPair = (KeyValuePair<string,List<MyClass>>)item;
List<MyClass> myClassList = selectedItemsPair.Value;
唯一的问题是我的组合框中的项目显示为:
My class 1, [System.Collection]
My Class 2, [System.Collection]
My Class 3, [System.Collection]
My Class 4, [System.Collection]
My Class 5, [System.Collection]
添加到组合框时,请使用:
myComboBox.Items.Add(selectedMyClassItems);
检索项目时,请使用:
List<MyClass> ddlMyClassSelectedItem = myComboBox.SelectedItem as List<MyClass>;
最后,在MyClass中,覆盖ToString(这样combobox就可以随心所欲地渲染它(:
public override string ToString()
{
return "MyClass " + myClassNumber;
}