Shadowed属性不是由设计师设置的

时间:2014-04-11 10:33:23

标签: c# vb.net winforms visual-studio-2012 windows-forms-designer

我有一个源自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属性来解决问题。但是我会把问题保持开放,因为我仍然想知道上面发布的方法是否可行。

1 个答案:

答案 0 :(得分:0)

我不希望表单设计者可以读取Shadow ed属性,因为它会将所有内容视为Control - 它不知道您的类这就是使用Shadowing方法的风险 - 你提供了一个新的实现,但只有知道你的人 - 了解你的基类的人才会得到你的基类&#39;实施

如果Control.Size property可以覆盖(虚拟,如果你愿意的话),那么可以覆盖它,它就可以了。