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

本文关键字:创建 复选框 动态 循环 删除 | 更新日期: 2023-09-27 18:34:03

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

 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++;
                    }
                }
            }

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

这就是我删除清单框中的项目和列表框

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

    }

如您所见,我也尝试编写一些东西来删除复选框,但它不起作用,我不知道如何使其工作

你能帮忙吗?

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

尝试使用用户控件。使用列表框控制器显示这些用户控件,可以使用这些复选框和所需的标签生成用户控件。

另一个建议是将此列表绑定到包含您创建的 UserContorols 的可观察集合。

这样,添加/删除/更改其中的项目将更加简单。