2009-02-26 37 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中,您需要在嘗試在設計器中查看更新之前重新編譯程序集。