Удалить флажок, который создается динамически в цикле

У меня есть куча кода, который динамически создает некоторые элементы управления. Он выглядит в папке и перечисляет имена файлов в ней. Для каждого файла в папке создается элемент контрольного списка, элемент списка и два флажка. Это работает отлично и по назначению:

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 ответ

Попробуйте использовать UserControls. Используйте ListBox-контроллер для отображения этих UserControls. Пользовательский элемент управления можно создать с помощью этих флажков и ярлыков, которые вы хотите.

Другое предложение - связать этот список с ObservableCollection, который будет содержать созданные вами UserContorols.

Таким образом, будет намного больше simlpe для добавления/удаления/изменения элементов внутри.

licensed under cc by-sa 3.0 with attribution.