0

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

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

        }


    }

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

你能帮忙吗?

4

1 回答 1

0

尝试使用用户控件。使用 ListBox 控制器来显示那些用户控件,用户控件可以用这些复选框和你想要的标签来构建。

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

这样,添加/删除/更改里面的项目会更加简单。

于 2013-10-06T16:15:20.437 回答