删除在循环中动态创建的复选框

时间:2013-10-06 15:51:35

标签: c# dynamic checkbox listbox checklistbox

我有一堆动态创建一些控件的代码。它查找文件夹并列出其中的文件名。对于文件夹中的每个文件,它会创建一个checklistbox项,列表框项和两个复选框。这很有效,并且符合预期:

 private void getAllFiles(string type)
    {
        try
        {
            string listPath = "not_defined"; 
            if (type == "internal_mod")
            {
                int first_line = 76;
                int next_line = 0;
                int i = 0;
                CheckBox[] chkMod = new CheckBox[100];
                CheckBox[] chkTool = new CheckBox[100];
                listPath = this.internalModsPath.Text;
                string[] filesToList = System.IO.Directory.GetFiles(listPath);
                foreach (string file in filesToList)
                {     
                    if (!internalModsChkList.Items.Contains(file))
                    {
                        internalModsChkList.Items.Add(file, false);
                        string fileName = Path.GetFileName(file);
                        internalModNameList.Items.Add(fileName);

                        //-----------------
                        // Draw Checkboxes
                        //-----------------
                        chkMod[i] = new CheckBox();                                                 chkTool[i] = new CheckBox();
                        chkMod[i].Name = "modChk" + i.ToString();                                   chkTool[i].Name = "modChk" + i.ToString();
                        //chkMod[i].TabIndex = i;                                                   //chkTool[i].TabIndex = i;
                        chkMod[i].Anchor = (AnchorStyles.Left | AnchorStyles.Top);                  chkTool[i].Anchor = (AnchorStyles.Left | AnchorStyles.Top);
                        chkMod[i].Checked = true;                                                   chkTool[i].Checked = false;
                        chkMod[i].AutoCheck = true;                                                 chkTool[i].AutoCheck = true;
                        chkMod[i].Bounds = new Rectangle(549, first_line + next_line, 15, 15);      chkTool[i].Bounds = new Rectangle(606, first_line + next_line, 15, 15);

                        groupBox7.Controls.Add(chkMod[i]);                                          groupBox7.Controls.Add(chkTool[i]);
                        //-----------------

                        next_line += 15;
                        i++;
                    }
                }
            }

现在我的问题是我还希望用户能够根据checklistbox'检查的项目再次删除所有这些东西..我没有问题删除清单框中的项目或列表框中的项目,但我想要删除我创建的两个复选框..

这是我删除清单框和列表框

中的项目
private void internalModListDel_btn_Click(object sender, EventArgs e)
    {
        int count = internalModsChkList.Items.Count;
        for (int index = count; index > 0; index--)
        {
            if (internalModsChkList.CheckedItems.Contains(internalModsChkList.Items[index - 1]))
            {
                internalModsChkList.Items.RemoveAt(index - 1);
                internalModNameList.Items.RemoveAt(index - 1);
                groupBox7.Controls.Remove(modChk[index - 1]);
            }

        }


    }

正如你所看到的,我也尝试写一些东西来删除复选框,但它不起作用,我不知道如何让它工作

你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

尝试使用UserControls。 使用ListBox控制器显示这些UserControls, 可以使用这些复选框和所需的标签构建用户控件。

另一个建议是将此列表绑定到一个ObservableCollection,它将包含您创建的UserContorols。

这样,添加/删除/更改内部项目将更加明智。