2010-03-16 103 views
0

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

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

整个问题的关键在于拥有最少和干净的代码,而不是buttonPlus的每个实例都应该有5行init代码。

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

继承人我的代码到目前为止。正如你所看到的,我尝试使用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

非常感谢您抽出宝贵的时间来看看这一点,并回答 所有最好的

回答

0

这听起来像你想的WinForms主题化,这是不是一个内置的事情,现在,不幸。但是,有一些第三方实现。

查看The Genghis Project中的ThemeManager类,为您提供一个在非常高级别或更精细的级别上执行此操作的框架。但是,它提供了你所要求的。

+0

此外,这将允许您为许多其他控件(组合框等)执行此操作,而无需自己继承每个控件。这非常方便! – Jaxidian 2010-03-16 17:11:51