如何在窗口窗体中访问组合框项成员值

本文关键字:组合 成员 访问 窗口 窗体 | 更新日期: 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;
    }