Использование программно созданных флажков в Windows Form [C #]

#c# #winforms

#c# #winforms

Вопрос:

Например, я хотел бы получить массив флажков:

         CheckBox[] faults = new CheckBox[20];
  

Теперь, как мне разместить их в моей форме и связать их с именем их массива?

Спасибо.

Комментарии:

1. Из приведенных ниже комментариев звучит так, как будто вы пытались сгенерировать элементы управления в коде, которыми затем можно было бы манипулировать в конструкторе. Похоже, вы ожидали, что ваши изменения во время выполнения сохранятся в конструкторе после завершения кода. Это можно сделать, создав плагин для Visual Studio, который управляет конструктором, но Visual Studio вообще не сохраняет никаких изменений, внесенных в результате выполнения вашего обычного кода.

2. @Godeke, да, это то, на что я надеялся, поскольку мне нравится визуализировать вещи в конструкторе. Но это нормально, я просто добавляю все флажки вручную.

Ответ №1:

Как насчет этого:

 YourForm.Controls.AddRange(faults);
  

Комментарии:

1. Спасибо @rsenna! Могу ли я взаимодействовать с ними в конструкторе после добавления элементов управления? Если да, то каким образом?

2. @Ryan R: не следует смешивать программно добавленные элементы управления с элементами управления, добавляемыми автоматически дизайнером форм Visual Studio. Представьте это как два отдельных мира: если вы хотите установить их положение с помощью конструктора, добавьте их таким же образом.

Ответ №2:

Вы должны перебирать все флажки в faults , но имейте в виду, что они не перекрываются, поэтому вы можете поступить следующим образом.

Пример:

 int top = 0;  //used for proper positioning of controls
foreach (CheckBox cb in faults) 
{

   cb.Location =new Point(0 , top); // fixing cb for distinct position
   top  =10; 

   this.Controls.Add(cb);

}
  

Комментарии:

1. Почему вы хотите, чтобы все они перекрывались?

2. Могу ли я вручную разместить их в конструкторе? Или они должны быть расположены программно?

Ответ №3:

 foreach (CheckBox cb in faults) YourForm.Controls.Add(cb);
  

Ответ №4:

Предполагая, что вы используете MS Visual Studio: создайте небольшой тестовый проект, добавьте флажок в форму с именем MyForm с помощью Visual Studio designer и ознакомьтесь с созданным методом InitializeComponent в файле MyForm.designer.cs . Это поможет вам узнать, какие свойства ваших флажков вам придется инициализировать. И, конечно, вы увидите, куда Visual Studio помещает вызов this.Controls.Add(cb) .

Ответ №5:

Попробуйте это:

 var faults = new CheckBox[20];

Point startPoint = new Point(20, 10);

for (int i = 0; i < faults.Length; i  )
{
    Controls.Add(new CheckBox()
    {
        Location = new Point(startPoint.X, 20 * i   startPoint.Y),
        Text = (i   1).ToString()
    });
}
  

Удачи!