在此问题出现之前,我在本网站上询问了this个问题。 (Jon Skeet先生回答了!)
我无法检索SelectedItem
的{{1}}。
请考虑我的代码:
CheckedListBox
我如何获得public class StaticValues
{
private string value;
private string display;
public StaticValues(string val, string disp)
{
this.value = val;
this.display = disp;
}
public string Value
{
get
{ return value; }
}
public string Display
{
get
{ return display; }
}
}
private void Form3_Load(object sender, EventArgs e)
{
ArrayList dataSource = new ArrayList();
dataSource.Add(new StaticValues("001", "Item 1"));
dataSource.Add(new StaticValues("002", "Item 2"));
dataSource.Add(new StaticValues("003", "Item 3"));
checkedListBox1.DataSource = dataSource;
checkedListBox1.DisplayMember = "Display";
checkedListBox1.ValueMember = "Value";
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(checkedListBox1.SelectedValue.ToString()); // outputs correct SelectedValue
MessageBox.Show(checkedListBox1.SelectedItem.ToString()); // this one doesn't for SelectedItem
}
?
答案 0 :(得分:1)
鉴于它是一个复选框列表,我怀疑使用CheckedListBox.CheckedIndices
属性找到所有选中的项目会更好。从那里,您可以访问单个项目并从中找到适当的值。虽然DisplayMember
有效,但我怀疑你最好将项目转换为已知类型并找到合适的价值,除非这对你来说真的很尴尬。可能还有另一种方式,但我不知道一个。请注意,CheckedListBox.ValueMember
的文档声称它“与此类无关”。
答案 1 :(得分:0)
最初没有选定的项目,至少在用户选择一项之前。 要检索用户选择的值,您必须对wselectedIndexChanged事件做出反应,并且如果用户将该值更改为OnSelectedValueChanged事件。
如果您希望找到哪些项目设置了复选框,那么您需要查看CheckecItemCollection和CheckedIndexCollection属性。