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