WinForms&;Infrastics控件的只读属性不适用于单击的控件

本文关键字:控件 不适用 适用于 单击 只读属性 Infrastics WinForms amp | 更新日期: 2023-09-27 18:00:03

我写这段代码是为了让所有控件都只读。

makeReadOnly(Control control, bool bIsReadOnly)
{
   for(int i=0; i< control.Controls.Count; i++)
   {
        if(control.Controls[i].Controls.Count > 0)
        {
           makeReadOnly(control.Controls[i], bIsReadOnly);
        }
        else if(control.Controls[i].GetType() == typeof(UltraTextEditor))
        {
           (control.Controls[i] as UltraTextEditor).ReadOnly = bIsReadOnly;
        }
        else if(control.Controls[i].GetType() == typeof(UltraNumericEditor))
        {
           (control.Controls[i] as UltraNumericEditor).ReadOnly = bIsReadOnly;
        }
        else if(control.Controls[i].GetType() == typeof(ListBox))
        {
           (control.Controls[i] as ListBox).Enable = !bIsReadOnly;
        }
   }
}

它可以工作,但若用户单击一个控件(如文本框),然后单击编辑按钮(调用makeReadOnly函数)。函数不适用于单击的文本框。(仅适用于其他控件)。

Private void EditButton_Click()
{
     foreach(Controls control in this.controls)
     {
          makeReadOnly(control, false);
     }
}

"this"表示父窗体。"EditButton_Click()"是按钮事件。为什么它对点击的人不起作用?我该如何解决这个问题?

WinForms&;Infrastics控件的只读属性不适用于单击的控件

我想,我找到了答案。问题出在Infrastics控件中。当用户单击UltraTextEditor或UltraComboEditor控件时,Infrastics会将其类型更改为类似"EmbeddableUIText…"的类型,其父类型将变为UltraTextEditor和UltraComboEdit。因此,我必须检查这些类型或控件的父类型来解决它。