CheckedListBox检查项目到对象转换?

时间:2010-12-04 15:13:02

标签: c# winforms

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

Plz任何人都可以提供帮助......

Thnx提前......

2 个答案:

答案 0 :(得分:3)

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...
    }
}

答案 1 :(得分:0)

这个怎么样?

Subject[] myObjects;

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

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