C# 如何有效地定义Radiobutton的条件?

C# 如何有效地定义Radiobutton的条件?,c#,winforms,radio-button,jradiobutton,C#,Winforms,Radio Button,Jradiobutton,我正试图找到一种有效的方法来定义单选按钮的条件 选择单选按钮后,我应禁用或填充文本框。举个例子: private void Transportauftrag_CheckedChanged(object sender, EventArgs e) { groupBox1.Visible = true; groupBox8.Visible = false; StartGerät.Text = ""; Sta

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

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

 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
es。该组框中的所有标签和文本框都位于
groupBox1.控件中。您可以按类型在一次吹平中取出:

 List<TextBox> allTextBoxesFromGroupBox1 = groupBox1.Controls.OfType<TextBox>().ToList();
但你最好从中找到一个方法:

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

    foreach (TextBox tb in allTextBoxesFromGroupBox1)
    {
        tb.Text = "";
    }
}
在这一点上,我们去掉了17行,只引入了4行

进行中。。。下一步是启用控制。似乎您再次将同一个groupbox中的所有文本框视为相同。因此,我们可以在方法中引入启用部分的另一个参数:

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;
    }
}

因此,现在您只剩下4行代码(我在屏幕截图中只看到4个分组框)

FehlerBereich.Enabled=condition
。创建一个初始化文本的新方法。然后从7个更改事件中调用该方法。将自定义属性添加到填充按钮和清空按钮。像这样
[Fill]类FehlerFehler
[Empty]类Transportbefehl
。然后使用反射对它们进行迭代,寻找自定义属性。@SonnyBlack我写了其余的。看看,但是如果我让“groupBoxStart”中的一个文本框处于启用状态,而另一个文本框为false,该怎么办?如果我做了一个foreach,我应该启用或禁用所有groupBox…@SonnyBlack“如果我应该启用“groupBoxStart”中的一个文本框,而另一个文本框为false会怎么样?”那么你需要一个基于规则的映射,这可以通过使用字典或swith case来实现。规则越细化,需要编写的代码就越多。你可以编辑你的文章,并给出进一步的例子,我们也可以尝试解决这个问题
FillAllTextBoxes(groupBoxStart, "");
FillAllTextBoxes(groupBoxZiel, "");
FillAllTextBoxes(groupBoxFehler, "****");
FillAllTextBoxes(groupBoxParameter, "");
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);