我已经通过以下方式继承了用户控件:
ControlBase
| __ControlInherited1
| __ControlInherited2
ControlBase
包含在每个继承的控件中都被覆盖的方法和属性,但根本没有其他控件。继承的控件将覆盖基本方法,并在其上具有子控件,并且彼此完全不同。
我在表单中添加了ControlBase
,并且我想根据运行时条件将其更改为ControlInherited1
或ControlInherited2
。
我想利用继承性,因此不必为每个继承的类添加不同的例程
我尝试了简单的controlBase = new ControlInherited1();
行,但是ControlInherited1
控件的对象未显示在表单上。
这样的视觉继承是否可能?
答案 0 :(得分:1)
您遇到的问题是,即使您的新控件继承自基本控件,也没有自动方法将现有属性应用于通过调用controlBase = new ControlInherited1();
添加的新属性。本质上,通过创建ControlInherited1
类的新实例并将其设置为controlBase
的值来覆盖原始变量时,您将丢失有关原始控件的所有信息。
替换现有控件的正确方法是先删除现有控件,然后将另一个添加到表单中,如下所示:
this.Controls.Remove(controlBase);
this.Controls.Add(newControl);
最重要的是,您必须做一些手动工作,以确保将要保留在原始控件中的所有属性都应用于新的(替换的)属性。