我有一个源自Panel
。
我正在遮蔽Size属性,因为我需要调整它(控件基本上是Winforms中的扩展器):
Private DesiredSize As Size
Public Shadows Property Size As Size
Get
Return DesiredSize
End Get
Set(value As Size)
DesiredSize = value
AdjustHeight()
End Set
End Property
AdjustHeight()
或多或少将基本大小设置为基于IsExpanded属性的值
Public Property CollapsedWidth As Integer
Private Sub AdjustHeight()
If IsExpanded Then
MyBase.Size = DesiredSize
Else
Dim newh As Integer = 15
Dim neww As Integer
If CollapsedWidth > 0 Then
neww = CollapsedWidth
Else
neww = DesiredSize.Width
End If
MyBase.Size = New Size(neww, newh)
End If
End Sub
我在构造函数中使用DesiredSize = MyBase.Size
初始化DesiredSize。
这很好用,但我在Visual Studio Designer中遇到了问题。每当我调整控件的大小时,都不会更新Size属性。设计时窗体上的控件调整大小,但是一旦我启动应用程序,它就会在运行时和设计时回到初始大小。
如何在Designer中实际处理Size属性?我是否可能需要在阴影大小属性中添加某种属性才能使其正常工作?
非常感谢VB.NET和C#中的答案。
修改
我尝试将<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
标记添加到属性中,因为我读到它可能会对这些情况有所帮助,但它不会改变我遇到的行为。
编辑2:
我通过采用不同的路径并避免遮蔽Size属性来解决问题。但是我会把问题保持开放,因为我仍然想知道上面发布的方法是否可行。
答案 0 :(得分:0)
我不希望表单设计者可以读取Shadow
ed属性,因为它会将所有内容视为Control
- 它不知道您的类这就是使用Shadowing方法的风险 - 你提供了一个新的实现,但只有知道你的人 - 了解你的基类的人才会得到你的基类&#39;实施
如果Control.Size
property可以覆盖(虚拟,如果你愿意的话),那么可以覆盖它,它就可以了。