对不起有些奇怪的标题。让我来描绘一下情况:继承:将Cast(Child-)UserControl转换为其基础版面
我有一个叫做TrafficInfraction的general usercontrol
。 其他用户从此TrafficInfraction控制inherit
。让他们叫他们超速驾驶&停车。德方案如下所示:
TrafficInfraction
Speeding (Inherits from TrafficInfraction + Has 2 extra buttons)
Parking (Inherits from TrafficInfraction + Has 1 extra textbox & 1 extra button)
添加运行时我想的Speeding/Parking
用户控件cast
的类型TrafficInfraction
(指定表格上,我不需要额外的控制)的用户控件。
我知道它可能使用浅拷贝如下(fIntractions
是flowlayoutpanel
):
注意:currTrafficInfractions是TrafficInfraction的集合(List Of)
。它可以包含从trafficInfraction继承的用户控件:超速,停车,....(可能进一步派生的用户控件)。 currTrafficInfractions根据基本控件(TrafficInfraction)上定义的属性填充。该物业被命名为'Fine',并且是double
。所有具有大于100的精细的用户控件(例如)都被添加到列表中。
For Each infra As TrafficInfraction In currTrafficInfractions
fInfractions.Controls.Add(infra.Clone())
Next
但我不想要一个浅拷贝(我显然失去某些特性:工具提示,...),并希望对象本身。所以,我认为它会像这样工作:
For Each infra As TrafficInfraction In currTrafficInfractions
fInfractions.Controls.Add(Ctype(infra,TrafficInfraction))
Next
或
For Each infra As TrafficInfraction In currTrafficInfractions
fInfractions.Controls.Add(infra)
Next
但我证明是错误的。布局不会改变(不同于.Clone
的效果)。我仍然看到这些额外的控制。简单地隐藏它们是行不通的。由于超速行驶&停车位的控件(从TrafficInfraction继承)的位置不同。
问题:如何将usercontrol转换/转换为其基本用户控件的布局。并将其正确显示为TrafficInfraction
给用户(没有在Speeding
或Parking
中声明的额外控制)?
注意:TrafficInfraction
implements IClonable
。这可能是.Clone
取得一些成功的原因。
什么是'currTrafficInfractions'? – Igor
更新了问题:currTrafficInfractions是Trafficinfractions的集合。 – User999999
拥有并由谁填充? – Igor