0

我有10 textBoxes一个表格,我有一个checkBox.

我希望这个复选框来控制是否启用了文本框。我知道我可以做到,textBox1.Enabled = true; textBox2.Enabled = true; etc但有什么办法可以做到one line更短或更短?

4

5 回答 5

1

您可以在一行代码中执行此操作,如下所示,

您将所有文本框放在一个组框或面板中。

Pnl.Enabled = Chk.Checked
于 2013-05-14T14:05:38.107 回答
0

更多代码高尔夫(从技术上讲一行): 假设文本框直接包含在表单中

    public Form1()
    {
        InitializeComponent();
        checkBox1.Checked = true;
        checkBox1.CheckedChanged += (sender, e) => { foreach (TextBox tb in this.Controls.OfType<TextBox>()) { tb.Enabled = ((CheckBox)sender).Checked; } };
    }
于 2013-05-14T14:32:14.977 回答
0

最干净的方法是首先创建一个 ' 数组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);
于 2013-05-14T14:03:55.177 回答
0
private void ToggleAllTextBoxControls()
{
    foreach (Control c in this.Controls)
        if (c Is TextBox)
             c.Enabled = chkEnable.Checked;
}  

这将遍历表单上的所有控件,如果它是 TextBox 并且选中了复选框,则启用它。

于 2013-05-14T14:05:29.833 回答
0
var cntrlCollections = GetAll(this,typeof(TextBox));

foreach (Control ctrl in cntrlCollections)
{
  ctrl.Enabled = checkBox.Checked;
}   
于 2013-05-14T14:07:19.253 回答