CheckedListBox может хранить любой тип объекта класса. Вам просто нужно переопределить ToString (), которое показывает описание объекта. Например:
class Subject {
public string Name { get; set; }
public int Code { get; set; }
public override string ToString() { return Name; }
}
Вы можете добавить их в коллекцию Предметов. Чтение обратно выбранных просто возвращает объект обратно в Subject. Например:
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...
}
}