在运行时更改Winforms控件

时间:2018-10-18 12:01:21

标签: c# winforms inheritance

我已经通过以下方式继承了用户控件:

ControlBase

| __ControlInherited1

| __ControlInherited2

ControlBase包含在每个继承的控件中都被覆盖的方法和属性,但根本没有其他控件。继承的控件将覆盖基本方法,并在其上具有子控件,并且彼此完全不同。

我在表单中添加了ControlBase,并且我想根据运行时条件将其更改为ControlInherited1ControlInherited2

我想利用继承性,因此不必为每个继承的类添加不同的例程

我尝试了简单的controlBase = new ControlInherited1();行,但是ControlInherited1控件的对象未显示在表单上。

这样的视觉继承是否可能?

1 个答案:

答案 0 :(得分:1)

您遇到的问题是,即使您的新控件继承自基本控件,也没有自动方法将现有属性应用于通过调用controlBase = new ControlInherited1();添加的新属性。本质上,通过创建ControlInherited1类的新实例并将其设置为controlBase的值来覆盖原始变量时,您将丢失有关原始控件的所有信息。

替换现有控件的正确方法是先删除现有控件,然后将另一个添加到表单中,如下所示:

this.Controls.Remove(controlBase);
this.Controls.Add(newControl);

最重要的是,您必须做一些手动工作,以确保将要保留在原始控件中的所有属性都应用于新的(替换的)属性。