【问题标题】:CheckedListBox checked items to object conversion?CheckedListBox 选中项到对象的转换?
【发布时间】:2010-12-04 15:13:01
【问题描述】:

我有一个名为 Subjects 的集合,其属性为字符串中的名称,以及 int 中的 SubjectCode。我将它传递给一个选中的列表框。按一下按钮,我想获取用户检查的所有项目的集合,将其转换为集合主题。

请任何人都可以帮忙....

提前谢谢...

【问题讨论】:

  • 代码胜于雄辩...

标签: c# winforms


【解决方案1】:

CheckedListBox 可以存储任何类型的类对象。您只需要一个显示对象描述的 ToString() 覆盖。例如:

    class Subject {
        public string Name { get; set; }
        public int Code { get; set; }
        public override string ToString() { return Name; }
    }

您可以将这些添加到 Items 集合中。读回选定的对象只需将对象投射回主题。例如:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        checkedListBox1.Items.Add(new Subject { Name = "Hans", Code = 42 });
        checkedListBox1.Items.Add(new Subject { Name = "User", Code = 486196 });
    }

    private void button1_Click(object sender, EventArgs e) {
        var selected = new List<Subject>();
        foreach (int index in checkedListBox1.SelectedIndices) {
            selected.Add((Subject)checkedListBox1.Items[index]);
        }
        // etc...
    }
}

【讨论】:

  • 谢谢汉斯,像往常一样,您提供了简洁而详细的说明(我错过了“ToString”)
【解决方案2】:

这个怎么样?

Subject[] myObjects;

void onButtonPressed(object sender, EventArgs e)
{
      foreach (int i in this.checkedItems.CheckedIndecies)
      { 
           Subject obj = myObjects[i];
      }
}

您可以直接访问对象,但您可能会面临 listBox 中的对象不是主题类型的情况,并且它会在将来为您提供更多的可扩展性。

【讨论】:

    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2014-09-16
    • 1970-01-01
    相关资源
    最近更新 更多