【问题标题】:Get back information from combo box in .NET WinForms从 .NET WinForms 的组合框中获取信息
【发布时间】:2014-02-19 13:01:42
【问题描述】:

我的问题是关于 WinForms 中的组合框。所以假设我们有一个包含很多字段的通用列表和 SingleItem 类。例如

class SingleItem{
    public int val1;
    public int val2;
    public string str;
    public override string ToString(){
        return str;
    }
};
List<SingleItem> listOfItems;

假设我们有 comboBox 变量。我正在以这种方式将项目添加到组合框

foreach(SingleItem item in listOfItems){
    comboBox.Items.Add(item);
}

然后,当用户完成选择一个项目时,我们需要从所选项目中获取另一个字段。例如,我需要这样的东西

comboBox.SelectedItem.val1; // where val1 is field of SingleItem class

这就是问题所在。我试图用谷歌搜索这个问题,但没有为我的问题找到有价值的答案。我也尝试进行类型转换,但失败了。我当前的解决方案是在列表中搜索选定的值,但是这个解决方案具有 O(n) 复杂性并且不够好。谢谢

【问题讨论】:

  • 不,当然,这只是示例,以表明我重写了 ToString 函数以便能够将项目添加到组合框。
  • 你做了什么类型转换?因为它应该有效。

标签: c# winforms combobox type-conversion


【解决方案1】:

我会这样做:

class SingleItem
{
    public int val1 { get; set; }
    public int val2 { get; set; }
    public string str { get; set; }
    public override string ToString()
    {
        return str;
    }

}

...

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    var obj = ((SingleItem)comboBox1.SelectedItem).val1; 
}

干杯

【讨论】:

  • 谢谢,它有效。所以我明白了,我必须写 {get; set;} 让它正常工作。不是吗?
  • 并非如此,但您确实需要将这些成员设为公开。使用 getter 和 setter 只是我认为更好的做法。
  • 谢谢,这段代码只是一个例子,不是很好,我的意思是公开的 :) 这很神奇,我试过类型转换,但失败了 :) 谢谢
  • @DavitPetrosyan 我建议您以后在发布伪代码时清楚地提及它。更好的是发布可编译的代码。
【解决方案2】:

尽量用数组代替itemlist,数组更容易添加到combobox中

这里是获取组合框中所选项目值的代码:

string str = (string)ComoBox.SelectedItem;

希望对您有所帮助!

【讨论】:

  • 感谢您的回答,但这不是我的问题。在“取回对象”下,我指的是我的对象的所有字段,而不仅仅是“str”字段(参见上面的类示例)。而且我使用 List,因为标准数组无法满足我的需求。
猜你喜欢
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2011-10-17
  • 2017-12-27
  • 2011-05-13
  • 1970-01-01
相关资源
最近更新 更多