0

尝试启用或禁用我的表单上的某些元素(复选框和文本框)阅读这篇文章,并重新制作这个代码

代码:

    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;不工作?(- 在 debagging 这部分代码以 false 传递的过程中 - 并且操作=不起作用 - 之前为假,之后为假......)

4

1 回答 1

1

我喜欢返回表单的所有子控件的方法——包括嵌套控件。

来自:表单中的 Foreach 控件,如何对表单中的所有 TextBox 进行操作?

我喜欢这个答案:

这里的诀窍是 Controls 不是 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
}
于 2013-09-28T10:38:24.457 回答