1

谁能建议一种将所有文本框设置为只读的方法。我尝试使用 aa 递归函数,但它会说ReadOnlySystem.Web.UI.Control没有这样的定义

    private void SetReadOnly<T>(Control parent, bool isReadOnly)
{
    foreach (Control ctrl in parent.Controls)
    {
        if (ctrl is T)
            ctrl.ReadOnly = isReadOnly;   // this line here wont work .
        SetReadOnly<T>(ctrl, isReadOnly);
    }
}

请任何替代品!

4

2 回答 2

1

您的代码的问题是它T可以是任何类型,但并非所有类型都具有该属性ReadOnly。因此编译器会窒息。

您不需要使用泛型来执行此操作:

private void SetReadOnly(Control parent, bool readOnly)
{
  // Get all TextBoxes and set the value of the ReadOnly property.
  foreach (var tb in parent.Controls.OfType<TextBox>())
    tb.ReadOnly = readOnly;

  // Recurse through all Controls
  foreach(Control c in parent.Controls)
    SetReadOnly(c, readOnly);
}

但是,如果您想使用泛型,可以这样做:

private void SetReadOnly<T>(Control parent, bool readOnly) where T : TextBox
{
  // Get all TextBoxes and set the value of the ReadOnly property.
  foreach (var tb in parent.Controls.OfType<T>())
    tb.ReadOnly = readOnly;

  // Recurse through all Controls
  foreach(Control c in parent.Controls)
    SetReadOnly<T>(c, readOnly);
}

这将限制泛型类型TextBox任何从它派生的类。这确保了该ReadOnly属性将始终存在并且编译器知道这一点。

于 2012-09-30T11:29:04.420 回答
0

您可以使用 jQuery 在客户端进行设置:

 $(document).ready(function() {
   $('input[type=text]').attr('readonly', true);
 });
于 2012-09-30T10:57:41.973 回答