2009-02-26 27 views
1

事件跟进这个问题:的WinForms为继承控件的UI风格

Winforms Style/UI Look and Feel Tips

所以我创建了我的“基本控制”,从其他控件继承。为了测试,我正在尝试更改基本标签的一种字体。但它不会传播到从它继承的控件。在其中一个窗体上,我可以看到设计器文件正在设置控件的属性,所以我的基本控件的属性被覆盖。

在基本控件的我使用构造函数来设置默认属性。我应该使用不同的事件吗?如果是,哪一个。

下面是根据意见要求基本控制的一个代码...

Public Class InfoLabel 
    Inherits Label 

    Public Sub New() 
     ' This call is required by the Windows Form Designer. 
     InitializeComponent() 

     ' Add any initialization after the InitializeComponent() call. 
     Me.Font = New System.Drawing.Font("Tahoma", 14.25!) 
     Me.ForeColor = System.Drawing.Color.FromArgb(CType(CType(49, Byte), Integer), CType(CType(97, Byte), Integer), CType(CType(156, Byte), Integer)) 
     Me.AutoSize = False 

    End Sub 
End Class 

基地控制显示上的WinForm的编辑器项目工具箱。控件然后从工具箱拖放。

+0

发表一些代码,描述没有帮助。 – 2009-02-26 16:31:49

+0

代码示例添加了更多评论。 – 2009-02-26 16:50:45

回答

2

你的问题是你的自定义控件的InitializeComponent()方法。我不知道为什么那里。如果你正在实现UserControl,你会自动获得该方法,但是从标准控件继承该方法不应该在那里。当你的基类有一个InitializeComponent()方法并且你的子类也有一个时,有人正在覆盖其他人。

我只是在C#中划分了一个标签。我把它拖到我的表单上,字体显示为新的字体,而不是基本(Label)类的字体。

using System.Drawing; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public class MyLabel : Label 
    { 
     public MyLabel() 
     { 
      Font = new Font("Candara", 14); 
     } 
    } 
} 

然后我创建了第二个标签,名为MySubLabel,它继承自MyLabel类。当我更改MyLabel类的ForeColor时,MySubLabel会自动更新。

所以这应该工作。注意:在Visual Studio中,您需要在尝试在设计器中查看更新之前重新编译程序集。