如果Control是Radiobutton或Textbox

时间:2017-06-29 03:10:03

标签: c# winforms

我有一个更改标题的表单取决于用户选择。然后我想为控件创建一个属性,无论是radiobutton还是checkbox。它们具有相同的属性但我无法很好地实现。

 private void DeleteEdit()
      {
        Control[] EmployeesControl; //I think this is the problem, but i cant figure it out.

        if (Form_AddEmployee.Text.Contains("Edit"))
        {
            EmployeesControl = new RadioButton[numberOfEmployees];
        }
        else if (Form_AddEmployee.Text.Contains("Delete"))
        {
            EmployeesControl = new CheckBox[numberOfEmployees];
        }

        for (int i = 0; i < EmployeesControl.Count(); i++)
        {
            EmployeesControl[i] = new EmployeesControl();
            InitializeControls(EmployeesControl[i]);
            EmployeesControl[i].Visible = true;
            panelEmployee.Controls.Add(EmployeesControl[i]);
            EmployeesControl[i].Text = stringTemp;
            EmployeesControl[i].Location = new Point(100, 100 * (i+1));
            EmployeesControl[i].Font = MyFont;
            EmployeesControl[i].CheckedChanged += EmployeesDeleteEditEmployees_CheckedChanged;
        }
    }

如果某个控件是单选按钮或复选框,我该如何创建变量。

2 个答案:

答案 0 :(得分:2)

在您将GetType更改为CheckBox或RadioButton后,您可以使用EmployeesControl[i]进行检查。

private void DeleteEdit()
{
    Control[] EmployeesControl; //I think this is the problem, but i cant figure it out.

    if (Form_AddEmployee.Text.Contains("Edit"))
        {
            EmployeesControl = new RadioButton[numberOfEmployees];
            for (int i = 0; i < EmployeesControl.Count(); i++)
            {
                EmployeesControl[i] = new RadioButton();
            }
        }
        else if (Form_AddEmployee.Text.Contains("Delete"))
        {
            EmployeesControl = new CheckBox[numberOfEmployees];
            for (int i = 0; i < EmployeesControl.Count(); i++)
            {
                EmployeesControl[i] = new CheckBox();
            }
        }
    ButtonBase b;
    CheckBox chk;
    RadioButton rdo;
    for (int i = 0; i < EmployeesControl.Count(); i++)
    {
        b = (ButtonBase)EmployeesControl[i];//You use b to set property
        if (EmployeesControl[i].GetType() == typeof(RadioButton))
        {
            rdo = (RadioButton)EmployeesControl[i];

            //Your code
            //................
            rdo.CheckedChanged += EmployeesDeleteEditEmployees_CheckedChanged;                    
        }
        else
        {
            chk = (RadioButton)EmployeesControl[i];

            //Your code
            //...............
            chk.CheckedChanged += EmployeesDeleteEditEmployees_CheckedChanged;
        }

        //EmployeesControl[i] = new EmployeesControl();
        //InitializeControls(EmployeesControl[i]);
        //EmployeesControl[i].Visible = true;
        //panelEmployee.Controls.Add(EmployeesControl[i]);
        //EmployeesControl[i].Text = stringTemp;
        //EmployeesControl[i].Location = new Point(100, 100 * (i + 1));
        //EmployeesControl[i].Font = MyFont;
        //EmployeesControl[i].CheckedChanged += EmployeesDeleteEditEmployees_CheckedChanged;                      
    }
}

我希望它会对你有所帮助。

答案 1 :(得分:0)

您可以将ButtonBase类用于您的perpouse。

通过ButtonBase声明控件数组,因此您可以使用CheckBox和RadioButton的常用属性而无需强制转换。

您可以通过

访问的CheckBox或RadioButton的属性
var a = EmployeesControl[i] as CheckBox;
if (a != null)
{
    //this is checkbox
    continue;
}
var b = EmployeesControl[i] as RadioButton;
if (b != null)
{
    //this is RadioButton
}