尝试启用或禁用表单上的某些元素(复选框和文本框) 阅读this post,并重新编写这段代码
代码:
private void checkBoxEnableHotKeys_CheckedChanged(object sender, EventArgs e)
{
if (checkBoxEnableHotKeys.Checked)
{
EnableControls(this.Controls, true);
} //works perfect
if (!checkBoxEnableHotKeys.Checked)
{
EnableControls(this.Controls, false);
} //disable all controls
}
private void EnableControls(Control.ControlCollection controls, bool status)
{
foreach (Control c in controls)
{
c.Enabled = status;
if (c is MenuStrip)
{
c.Enabled = true;
}
if (c.Controls.Count > 0)
{
EnableControls(c.Controls, status);
}
}
checkBoxEnableHotKeys.Enabled = true; //not work
}
我犯了错误?为什么checkBoxEnableHotKeys.Enabled = true;
不起作用? ( - 在将这部分代码传递给false并且操作=
无法正常工作时 - 假前和假后......)
答案 0 :(得分:1)
我喜欢返回表单所有子控件的方法 - 包括嵌套控件。
来自:Foreach Control in form, how can I do something to all the TextBoxes in my Form?
我喜欢这个答案:
这里的技巧是控件不是List<>或IEnumerable但是ControlCollection。
我建议使用Control的扩展名,它将返回更多的内容。)
public static IEnumerable<Control> All(this ControlCollection controls)
{
foreach (Control control in controls)
{
foreach (Control grandChild in control.Controls.All())
yield return grandChild;
yield return control;
}
}
然后你可以这样做:
foreach(var textbox in this.Controls.All().OfType<TextBox>)
{
// Apply logic to the textbox here
}