Я не уверен, как вы будете обрабатывать все эти элементы управления без использования GroupBox
. Если вы используете GroupBox
для группировки всех выпущенных RadioButton
элементов управления, вы можете l oop над ними, используя групповую коробку.
Пример:
foreach(var control in groupbox.Controls)
{
if(control is RadioButton)
{
var radio = control as RadioButton;
var name = radio.Name;
if(radio.Checked) { ... }
}
}
Вы можете сделать то же самое используя main Form
в качестве контейнера, но это будет l oop по всем элементам управления формой, что не будет хорошей идеей.
Во-вторых, вы можете определить private
методы, которые будут обрабатывать некоторые части кода, которые упростят обработку, например, метод для установки размера, другой для установки цвета, другой для получения сообщения для выбранного размера, и аналогично вы делаете то же самое для цвета. В конце концов, вы только передадите значение этим методам, а затем обработаете результаты, как хотите.
вот пример:
private System.Drawing.Size GetSize(string radioButtonName)
{
switch(radioButtonName)
{
case "radioButton3":
return new System.Drawing.Size(500, 500);
case "radioButton4":
return new System.Drawing.Size(750, 750);
default: // set a default size
return Size.Empty;
}
}
private Color GetColor(string radioButtonName)
{
switch(radioButtonName)
{
case "radioButton1":
return Color.Blue;
case "radioButton2":
return Color.Red;
case "Yellow":
return Color.Yellow;
default: // set a default color
return Color.Empty;
}
}
private string GetSizeTextMessage(int width)
{
switch(width)
{
case 500:
return "Small";
case 750:
return "Large";
default:
return null;
}
}
Теперь, с помощью этого, вы можете добавить или настроить любые параметры, которые вы хотите им. Затем, в вашем главном событии щелчка, вы можете сделать что-то вроде этого:
string sizeRadioName;
string colorRadioName;
// changes color of form
if (radioButton1.Checked)
{
colorRadioName = radioButton1.Name;
}
else if (radioButton2.Checked)
{
colorRadioName = radioButton2.Name;
}
// changes size of form
if (radioButton3.Checked)
{
sizeRadioName = radioButton3.Name;
}
else if (radioButton4.Checked)
{
sizeRadioName = radioButton4.Name
}
if(size != Size.Empty && color != Color.Empty) {
this.Size = GetSize(sizeRadioName);
this.BackColor = GetColor(colorRadioName);
textBox1.Text = $"A {GetSizeTextMessage(this.Size.Width)} , {this.BackColor.Name} form";
}
это для вашей текущей реализации, если вы использовали GroupBox
, оно изменилось бы на что-то вроде этого:
Size size;
Color color;
foreach(var control in groupBoxExample.Controls)
{
if(control.GetType() != typeof(RadioButton)) { continue; }
var radio = control as RadioButton;
var name = radio.Checked ? radio.Name : null;
if(name == null) { continue; }
size = GetSize(name);
color = GetColor(name);
}
if(size != Size.Empty && color != Color.Empty) {
this.Size = size;
this.BackColor = color;
textBox1.Text = $"A {GetSizeTextMessage(this.Size.Width)} , {this.BackColor.Name} form";
}
Как вы можете видеть из этого, мы просто помещаем все рад ios в групповую коробку, и я зацикливаю их.
Надеюсь, это поможет вам.