如果在C#中创建Windows UserControl,则通过“Controls”集合公开该UserControl的“子”控件。也就是说,用户控件的使用者可以引用Controls集合并获得对内部控件的访问权。
有没有办法划分这样的设计,以便消费者无法访问UserControl设计者未明确公开的任何内容?
示例:我有一个用户控件,在内部有两个TextBox控件。我的UserControl的消费者可以写下以下内容:
MyControl1.Controls[0].Enabled = false;
是否有一种方法(例如)让“Controls”属性返回一个空集合,以便消费者无法摆弄用户控件的内部工作?
UserControl应该公开几乎所有“Control”将公开的属性,而不是那些可以访问其内部工作的集合,这似乎是合理的。
谢谢, 罗斯
答案 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),则需要小心。