2016-11-12 53 views
0

我正在尝试访问组合框项目的值。该项目的值是类型MyClass如何在Windows窗体中访问Combobox项目MemberValue?

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}); 
    } 
} 

这是我的示例代码。现在我正在尝试访问ValueMember。当我在组合框中选择一个项目时,我可以获取选定的项目。

var ddlMyClassSelectedItem = myComboBox.SelectedItem; 

在调试观察WINDO,我能看到ValueMember该项目具有的项目作为一个列表,但我不知道如何访问/检索。

+2

您的代码不会编译的。目前还不清楚你在问什么。 –

+0

让您的类覆盖ToString()方法并返回描述MyClass实例所需的任何内容,然后将组合的DataSource设置为列表并将组合的ValueMember属性设置为MyClass的标识成员 – Steve

+0

我不是使用数据源,我手动添加项目,尽管我的代码中显示的for循环。 – user3726459

回答

1

让我们讨论你做了什么。你如何找回您的会员是没有什么兴趣的,虽然你可以这样

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); 

你知道ddlMyClassSelectedItemComboItem

+0

suggesstion为我完美工作。谢谢! – user3726459

0

当添加到组合框,使用:

myComboBox.Items.Add(selectedMyClassItems); 

当检索该项目,使用:

List<MyClass> ddlMyClassSelectedItem = myComboBox.SelectedItem as List<MyClass>; 

最后,在MyClass的,覆盖的ToString(这样的组合框可以,只要你喜欢使它):

public override string ToString() 
    { 
     return "MyClass " + myClassNumber; 
    } 
+0

我想出了一个可行的解决方案,但它并不干净。我在下面添加解决方案。使用ComboItem类的 – user3726459

0
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; 

唯一的问题与此是,在我的COMBOX表演项目,如:

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] 
相关问题