我有10 textBoxes
一个表格,我有一个checkBox
.
我希望这个复选框来控制是否启用了文本框。我知道我可以做到,textBox1.Enabled = true; textBox2.Enabled = true; etc
但有什么办法可以做到one line
更短或更短?
您可以在一行代码中执行此操作,如下所示,
您将所有文本框放在一个组框或面板中。
Pnl.Enabled = Chk.Checked
更多代码高尔夫(从技术上讲是一行): 假设文本框直接包含在表单中
public Form1()
{
InitializeComponent();
checkBox1.Checked = true;
checkBox1.CheckedChanged += (sender, e) => { foreach (TextBox tb in this.Controls.OfType<TextBox>()) { tb.Enabled = ((CheckBox)sender).Checked; } };
}
最干净的方法是首先创建一个 ' 数组TextBox
,然后对其进行迭代。
var textBoxes = new TextBox[] { ... };
...
foreach(var tb in textBoxes)
{
tb.Enabled = true;
}
但是您要求“一行或更短”的解决方案。要在一行中完成,您必须这样做:
new [] { textBox1 ... }.ToList().ForEach(tb => tb.Enabled = true);
或者
new [] { textBox1 ... }.AsParallel().ForAll(tb => tb.Enabled = true);
private void ToggleAllTextBoxControls()
{
foreach (Control c in this.Controls)
if (c Is TextBox)
c.Enabled = chkEnable.Checked;
}
这将遍历表单上的所有控件,如果它是 TextBox 并且选中了复选框,则启用它。
var cntrlCollections = GetAll(this,typeof(TextBox));
foreach (Control ctrl in cntrlCollections)
{
ctrl.Enabled = checkBox.Checked;
}