3

以下是我将 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'正在获取文本但没有显示它。

看这里: 在此处输入图像描述

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

更新

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

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

3 回答 3

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而不是空格。

于 2013-10-06T21:24:40.403 回答
1

对我有用的是做

Invoke(new Action(()=>checkedListBox1.Items.Add(c.Text, true)));

代替

Invoke(new Action(()=>checkedListBox1.Items.Add(c, true)));

希望这可以帮助。

于 2019-05-22T09:22:05.730 回答
0

希望这可以帮助您只声明列表项并设置名称和值

     ListItem item = new ListItem();
     item.Text = "text on checkbox";
     item.Value = "Value of checkbox";
     item.Enabled = true;
    // add to the current checkbox list that u using 
     
     CheckBoxList1.Items.Add(item);
            
于 2021-12-14T14:41:39.373 回答