动态添加CheckBoxes到CheckBoxList不显示文本

时间:2013-10-06 21:17:39

标签: c# .net winforms user-interface checkbox

以下是我将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)));
}

问题是每当我运行此代码时,都会添加复选框,但不会添加文本。像这样: enter image description here

我尝试调试它然后我发现CheckBox实例'c'正在获取Text但没有显示它。

见这里: enter image description here

请告诉我这段代码出了什么问题?

更新

请注意,我不能这样使用它:

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());
}

2 个答案:

答案 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)));

希望这会有所帮助。