阴影属性不是由设计器设置的

本文关键字:设置 属性 阴影 | 更新日期: 2023-09-27 17:57:49

我有一个从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属性?我可能需要向shadows Size属性添加某种属性才能使其工作吗?

非常感谢VB.NET和C#中的答案。

编辑:
我试着将<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>标记添加到该属性中,因为我读到它在这种情况下可能会有所帮助,但它不会改变我正在经历的行为。

编辑2:
我通过采用不同的路径并避免遮蔽Size属性来解决这个问题。然而,我将保留这个问题,因为我仍然想知道上面发布的方法是否可行。

阴影属性不是由设计器设置的

我不希望Shadowed属性能被表单设计器读取,因为它会把所有东西都当作Control来处理——它不知道你的类,这就是Shadowing方法的风险——你正在提供一个新的实现,但只提供给了解你的人——了解你的基类的人,将获得基类的实现。

如果Control.Size属性是可重写的(如果您愿意的话,是虚拟的),那么您可以重写它,它就会起作用。