将控件集合设为只读



我目前正在使用一个 Web 表单应用程序,其中我正在使用Devexpress控件。我正在使用的控件是(但不限于(:

  1. 引导组合框
  2. BootstrapSpinEdit
  3. BootstrapTextBox

形式相当大,所以我试图实现的是传入,例如 IEnumerable<T>,然后循环访问集合,并将 ReadOnly 属性设置为 true 。我知道我一次可以做一个控件,但我有 50 多个控件,所以我想知道是否有更通用的方法。

我有以下代码片段:

public static void MakeControlReadOnly<T>(this IEnumerable<T> controlCollection)
{
   foreach(var c in controlCollection)
      c.ReadOnly = true;
}

但是我不断收到一个错误:

严重性代码说明项目文件行抑制状态 错误 CS1061 "T"不包含"只读"的定义,并且找不到接受类型"T"的第一个参数的扩展方法"只读"(是否缺少 using 指令或程序集引用?

我理解这个错误,但我不确定如何克服它。

尝试隐式类型T作为ASPxEditBaseDevExpress的基本可编辑控件

public static void MakeControlReadOnly<T>(this IEnumerable<T> controlCollection)
              where T: ASPxEditBase
{
   controlCollection.ToList().ForEach(x=> x.ReadOnly = true);
}

可以在包含只读属性的基类的泛型上放置类型约束

public static void MakeControlReadOnly<T>(this IEnumerable<T> controlCollection) where T: BaseType //Set this to the correct base type
{
   foreach(var c in controlCollection)
      c.ReadOnly = true;
}

最新更新