2

我希望能够通过单击按钮将表单上的一组控件设置为只读并返回。有没有办法遍历它们?this.Controls也许......

谢谢!

4

4 回答 4

5

如果要将所有控件设置为只读,可以执行以下操作:

foreach(Control currentControl in this.Controls)
{
    currentControl.Enabled = false;
}

如果您真正想要做的是将某些控件设置为只读,我建议保留相关控件的列表,然后在该列表上执行 ForEach,而不是全部。

于 2009-05-26T19:42:05.593 回答
3

将它们设置为启用/禁用很容易,请参阅 GWLIosa'a 答案。

但是,并非所有控件都具有只读属性。你可以使用类似的东西:

foreach (Control c in this.Controls)
{
  if (c is TextBox)
    (c as TextBox).Readonly = newValue;
  else if (c is ListBox)
    (c as ListBox).Readonly = newValue;
  // etc
}
于 2009-05-26T19:49:26.577 回答
2

就个人而言,我会将我想要影响的所有控件(和子控件)放入Panel- 然后只需更改单个Panel. 这意味着您不必开始存储旧值(例如,将它们放回去 - 您可能不想假设它们都开始启用)。

于 2009-05-26T19:52:17.383 回答
1

我建议您使用 GWLlosa 建议的 Enabled 属性,但如果您想要或需要使用 ReadOnly 属性,请尝试以下操作:

        foreach (Control ctrl in this.Controls)
        {
            Type t = ctrl.GetType();

            PropertyInfo propInfo = t.GetProperty("ReadOnly");

            if (propInfo != null)
                propInfo.SetValue(ctrl, true, null);
        }
于 2009-05-26T20:08:05.057 回答