【发布时间】:2014-04-11 10:33:23
【问题描述】:
我有一个从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() 或多或少将基本 Size 设置为基于 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 设计器中遇到了问题。每当我调整控件大小时,Size 属性都不会更新。设计时窗体上的控件会调整大小,但一旦我启动应用程序,它就会在运行时和设计时恢复到初始大小。
在 Designer 中实际如何处理 Size 属性?我是否可能需要向阴影大小属性添加某种属性才能使其工作?
非常感谢 VB.NET 和 C# 中的答案。
编辑:
我尝试将 <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> 标记添加到属性中,因为我读到它可能会在此类情况下有所帮助,但它不会改变我所遇到的行为。
编辑 2:
我通过采用不同的路径并避免遮蔽 Size 属性来解决问题。不过,我将把这个问题留着,因为我仍然想知道上面发布的方法是否可行。
【问题讨论】:
-
只处理 SizeChanged 事件而不是隐藏属性可能更容易。
标签: c# vb.net winforms visual-studio-2012 windows-forms-designer