如何防止UserControl的用户看到控件的子控件?

时间:2011-04-04 15:48:17

标签: c# user-controls

如果在C#中创建Windows UserControl,则通过“Controls”集合公开该UserControl的“子”控件。也就是说,用户控件的使用者可以引用Controls集合并获得对内部控件的访问权。

有没有办法划分这样的设计,以便消费者无法访问UserControl设计者未明确公开的任何内容?

示例:我有一个用户控件,在内部有两个TextBox控件。我的UserControl的消费者可以写下以下内容:

MyControl1.Controls[0].Enabled = false;

是否有一种方法(例如)让“Controls”属性返回一个空集合,以便消费者无法摆弄用户控件的内部工作?

UserControl应该公开几乎所有“Control”将公开的属性,而不是那些可以访问其内部工作的集合,这似乎是合理的。

谢谢, 罗斯

1 个答案:

答案 0 :(得分:0)

不知道这是否适用于所有情况,但似乎是在非常简单测试中。

public partial class UserControl1 : UserControl
{
  private ControlCollection _controls;

  public UserControl1()
  {
     InitializeComponent();

     _controls = new ControlCollection(this);
  }

  new public ControlCollection Controls
  {
     get
     {
        return (_controls != null ? _controls : base.Controls);
     }
  }
}

当然,如果用户控件想要访问自己的“控件”集合(并且必须使用base.Controls),则需要小心。