如何有效地定义单选按钮的条件?

问题描述

我正试图找到一种有效的方法来定义单选按钮的条件。

enter image description here

选择单选按钮后,我应禁用或填充文本框。举一个例子:

 private void Transportauftrag_CheckedChanged(object sender,EventArgs e)
    {
        groupBox1.Visible = true;
        groupBox8.Visible = false;
        StartGerät.Text = "";
        StartBlockFach.Text = "";
        StartTiefe.Text = "";
        ZielGerät.Text = "";
        ZielBlockFach.Text = "";
        ZielTiefe.Text = "";
        FehlerFehler.Text = "****";
        FehlerBereich.Text = "****";
        FehlerInfo.Text = "****";
        Transportbefehl.Text = "";
        Breite.Text = "";
        Tiefe.Text = "";
        Höhe.Text = "";
        Typ.Text = "";
        Folgeauftrag.Text = "";
        Behälternummer.Text = "";
        Reserve.Text = "";
        StartGerät.Enabled = true;
        StartBlockFach.Enabled = true;
        StartTiefe.Enabled = true;
        ZielGerät.Enabled = true;
        ZielBlockFach.Enabled = true;
        ZielTiefe.Enabled = true;
        FehlerFehler.Enabled = false;
        FehlerBereich.Enabled  = false;
        FehlerInfo.Enabled = false;
        Transportbefehl.Enabled = true;
        Breite.Enabled = true;
        Tiefe.Enabled = true;
        Höhe.Enabled = true;
        Typ.Enabled = true;
        Folgeauftrag.Enabled = true;
        Behälternummer.Enabled = true;
        Reserve.Enabled = true;
    }

所以现在我应该这样做7次。 为此,我在WindowsFormsApp文件中需要400多个代码行。

他们有更好的方法/解决方案吗?

解决方法

好的,这里有一些建议。基本上,如果遇到此类问题,则表明您需要一个组织结构。否则会迷路。从GUI图片中可以看到,您已经有GroupBox个对此进行整理。该组框内的所有标签和文本框都位于groupBox1.Controls中。即使按类型,您也可以一口气将它们取出:

 List<TextBox> allTextBoxesFromGroupBox1 = groupBox1.Controls.OfType<TextBox>().ToList();

现在您可以对其进行迭代,并为每个文本框写入相同的值:

foreach (TextBox tb in allTextBoxesFromGroupBox1)
{
    tb.Text = "";
}

但是您最好使用它来做一个方法:

private void FillAllTextBoxes(GroupBox groupBox,string text)
{
    List<TextBox> allTextBoxesFromGroupBox1 = groupBox.Controls.OfType<TextBox>().ToList();

    foreach (TextBox tb in allTextBoxesFromGroupBox1)
    {
        tb.Text = "";
    }
}

现在您可以简单地调用它并传递必要的输入:

FillAllTextBoxes(groupBoxStart,"");
FillAllTextBoxes(groupBoxZiel,"");
FillAllTextBoxes(groupBoxFehler,"****");
FillAllTextBoxes(groupBoxParameter,"");

在这一点上,我们摆脱了17行,只介绍了4条

继续...下一步将是启用控件。看来您再次将相同组框中的所有文本框都视为相同。因此,我们可以在该方法中为启用部分引入另一个参数:

private void FillAllTextBoxes(GroupBox groupBox,string text,bool enable)
{
    List<TextBox> allTextBoxesFromGroupBox1 = groupBox.Controls.OfType<TextBox>().ToList();

    foreach (TextBox tb in allTextBoxesFromGroupBox1)
    {
        tb.Text = "";
        tb.Enabled = enable;
    }
}

这使我们可以完全删除其余的行,而无需引入新的代码行:

FillAllTextBoxes(groupBoxStart,"",true);
FillAllTextBoxes(groupBoxZiel,true);
FillAllTextBoxes(groupBoxFehler,"****",false);
FillAllTextBoxes(groupBoxParameter,true);

所以现在您只剩下4行代码了(我的屏幕快照中只有4个分组框)