.Net Inherited Control属性默认值

时间:2010-03-16 16:59:28

标签: .net inheritance properties default

我试图制作一个简单的“ButtonPlus”控件。主要思想是从按钮控件继承并添加一些默认属性值(如字体,颜色,填充......)

无论我如何尝试,WinForm总是在客户端表单中生成(或“序列化”)属性值

重点是拥有最小且干净的代码,而不是buttonPlus的每个实例都应该有5行初始化代码。

我希望表单设计者不应为这些属性生成任何代码,并且能够从ButtonPlus代码控制它们。换句话说,如果我将ForeColor从红色更改为蓝色,应用程序中只有1个单一的代码行应该更改。

到目前为止,这是我的代码。正如你所看到的,香港专业教育学院尝试使用defaultvalue,reset,shouldserialize ....我能在网上找到的任何东西!

Public Class ButtonPlus

Inherits Button

Sub New()        
    AutoSizeMode = Windows.Forms.AutoSizeMode.GrowAndShrink
    Font = New System.Drawing.Font("Arial", 11.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(177, Byte))
    Padding = New System.Windows.Forms.Padding(3)
    Anchor = AnchorStyles.Left + AnchorStyles.Right + AnchorStyles.Top
    ForeColor = Color.Aqua
End Sub

<DefaultValue(True)> _
Public Overrides Property AutoSize() As Boolean
    Get
        Return MyBase.AutoSize
    End Get
    Set(ByVal value As Boolean)
        MyBase.AutoSize = value
    End Set
End Property

Public Function ShouldSerializeAutoSize() As Boolean
    Return False ' Not AutoSize = True
End Function

Public Function ShouldSerializeForeColor() As Boolean
    Return False 'Not ForeColor = Color.Aqua
End Function

Public Overrides Sub ResetForeColor()
    ForeColor = Color.Aqua
End Sub

End Class

Inherits Button Sub New() AutoSizeMode = Windows.Forms.AutoSizeMode.GrowAndShrink Font = New System.Drawing.Font("Arial", 11.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(177, Byte)) Padding = New System.Windows.Forms.Padding(3) Anchor = AnchorStyles.Left + AnchorStyles.Right + AnchorStyles.Top ForeColor = Color.Aqua End Sub <DefaultValue(True)> _ Public Overrides Property AutoSize() As Boolean Get Return MyBase.AutoSize End Get Set(ByVal value As Boolean) MyBase.AutoSize = value End Set End Property Public Function ShouldSerializeAutoSize() As Boolean Return False ' Not AutoSize = True End Function Public Function ShouldSerializeForeColor() As Boolean Return False 'Not ForeColor = Color.Aqua End Function Public Overrides Sub ResetForeColor() ForeColor = Color.Aqua End Sub

非常感谢您花时间仔细研究并回答 一切顺利

1 个答案:

答案 0 :(得分:0)

听起来你想要WinForms主题,不幸的是,它现在不是内置的东西。但是,有一些第三方实现。

查看The Genghis Project中的ThemeManager类,为您提供一个非常高级或更细粒度的框架。但它确实提供了你所要求的东西。