以下是我将CheckBoxes动态添加到CheckBoxList的代码:
foreach (WCore.CategoryFields cat in Global.getCategories())
{
CheckBox c = new CheckBox();
c.Text = cat.CategoryId;
c.Tag = cat.CategoryName;
if (ints != null)
{
if (ints.Contains(c.Tag))
Invoke(new Action(()=>checkedListBox1.Items.Add(c, true)));
else
Invoke(new Action(()=>checkedListBox1.Items.Add(c, false)));
}
else
Invoke(new Action(()=>checkedListBox1.Items.Add(c, false)));
}
问题是每当我运行此代码时,都会添加复选框,但不会添加文本。像这样:
我尝试调试它然后我发现CheckBox实例'c'正在获取Text但没有显示它。
见这里:
请告诉我这段代码出了什么问题?
更新
请注意,我不能这样使用它:
Invoke(new Action(()=>checkedListBox1.Controls.Add(c)));
因为它更好地使用面板而不是CheckBoxList。 另外,我希望两个值显示为文本,其他值隐藏为CheckBoxList中每个CheckBox的值
更新2
获取所选项目的代码:
List<string> SelInts = new List<string>();
foreach (ListBoxItem c in checkedListBox1.SelectedItems)
{
SelInts.Add(c.Tag.ToString());
}
答案 0 :(得分:2)
试试这个:
foreach (WCore.CategoryFields cat in Global.getCategories()){
ListBoxItem c = new ListBoxItem;
c.Text = cat.CategoryId;
c.Tag = cat.CategoryName;
if (ints != null)
{
if (ints.Contains(c.Tag))
Invoke(new Action(()=>checkedListBox1.Items.Add(c, true)));
else
Invoke(new Action(()=>checkedListBox1.Items.Add(c, false)));
}
else
Invoke(new Action(()=>checkedListBox1.Items.Add(c, false)));
}
//Add this class somewhere in your form class or beside it
public class ListBoxItem {
public string Text {get;set;}
public object Tag {get;set;}
public override string ToString(){
return Text;
}
}
我怀疑你的CheckBox
不能显示为字符串,尽管它应该显示System.Windows.Forms.CheckBox
而不是空格。
答案 1 :(得分:1)
对我有用的是做
Invoke(new Action(()=>checkedListBox1.Items.Add(c.Text, true)));
代替
Invoke(new Action(()=>checkedListBox1.Items.Add(c, true)));
希望这会有所帮助。