为GroupControl中的所有控件创建一个唯一的foreach循环

时间:2012-09-22 17:18:54

标签: c# winforms devexpress

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

我希望当我点击按钮将thos控件的属性更改为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不包含'Properties'的定义

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

包括linq。

使用以下代码:

foreach (var edit in InformationsGroupControl.Controls.OfType<BaseEdit>())
{
    edit.Properties.ReadOnly = false;
}