0

我有一个包含 GroupControl 的表单,在这个 GroupControl 中有一些控件。

我希望当我单击一个按钮以将这些控件的属性更改为control.Properties.ReadOnly = false;

所以我创建了这段代码:

      foreach (TextEdit te in InformationsGroupControl.Controls)
      {
           te.Properties.ReadOnly = false;
      }

      foreach (TextEdit te in InformationsGroupControl.Controls)
      {
           te.Properties.ReadOnly = false;
      }
      foreach (DateEdit de in InformationsGroupControl.Controls)
      {
           de.Properties.ReadOnly = false;
      }
      foreach (ComboBoxEdit cbe in InformationsGroupControl.Controls)
      {
           cbe.Properties.ReadOnly = false;
      }
      foreach (MemoEdit me in InformationsGroupControl.Controls)
      {
           me.Properties.ReadOnly = false;
      }
      foreach (CheckEdit ce in InformationsGroupControl.Controls)
      {
           ce.Properties.ReadOnly = false;
      }

这行得通,但我必须为每个控件创建一个 foreach 循环。

我也试过这个

foreach (Control control in InformationsGroupControl.Controls)
{
    control.Properties.ReadOnly = false;
}

但 System.Windows.Forms.Control 不包含“属性”的定义

如何为 GroupControl 中的所有控件创建一个仅 foreach 循环?

4

3 回答 3

2

看起来您正在使用一组都派生自同一个 BaseClass 的控件。那是BaseClass,BaseEdit吗?

如果是这样,请这样做...

foreach(object control in InformationsGroupControl.Controls)
{
    BaseEdit editableControl = control as BaseEdit;
    if(editableControl != null)
        editableControl.Properties.ReadOnly = false;
}

我从这个链接做出这个猜测(它有你正在使用的控件)。 http://documentation.devexpress.com/#WindowsForms/DevExpressXtraEditorsBaseEditMembersTopicAll

于 2012-09-22T17:31:22.463 回答
1

我更喜欢基类方法。但是既然你说只有少数类型需要'ReadOnly = false',你可以做这样的事情

foreach (Control c in InformationsGroupControl.Controls)
{
   if(c is TextEdit || c is DateEdit || c is ComboBoxEdit || c is MemoEdit || c is CheckEdit)
       (c as BaseEdit).Properties.ReadOnly = false;
}
于 2012-09-22T18:05:18.573 回答
0

包括linq。

使用以下代码:

foreach (var edit in InformationsGroupControl.Controls.OfType<BaseEdit>())
{
    edit.Properties.ReadOnly = false;
}
于 2012-09-24T13:10:49.377 回答