2010-01-29 68 views
1

我創建像這樣(簡單的例子)的自定義用戶控件:如何創建更新設計器的.NET winforms自定義控件?

public class MyButton : Button 
{ 
    public MyButton() 
    { 
     BackColor = Color.Blue; 
    } 
} 

編譯後,它出現在表單設計工具箱,並顯示與更新的屬性。但是,如果我改變顏色,我已經在窗體上使用的控件保持其原始顏色。

有沒有一種方法來設計一個控制器,將它的變化傳播給設計師?

+0

當你說你改變顏色,你的意思是你改變的代碼行「BackColour = Color.Blue」還是你通過改變控制的1個實例的屬性VS屬性頁面? – 2010-01-29 15:06:55

+0

我改變了代碼行 – 2010-01-29 15:12:14

+0

當發生如果你然後運行整個應用程序(F5)所有的控件更新/更改呢? – 2010-01-29 15:16:49

回答

5

問題是,在編輯類之前,您在表單上放下的按鈕已被表單的InitializeComponent()調用以不同的顏色初始化。換句話說,它們會覆蓋您在構造函數中設置的默認顏色。你必須做的是聲明該屬性的默認值,以便設計者不會生成任務。這應該是這樣的:

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

class MyButton : Button { 
    public MyButton() { 
     BackColor = Color.Blue; 
    } 
    [DefaultValue(typeof(Color), "Blue")] 
    public override Color BackColor { 
     get { return base.BackColor; } 
     set { base.BackColor = value; } 
    } 
} 
+0

從技術上講,這適用於窗體上的單個控件。當我將第二個控件放到窗體上,然後更改顏色時,原始顏色仍然存在。有任何想法嗎? – 2010-01-29 18:04:54

+0

查看Designer.cs文件並確保未分配BackColor屬性。如果在更改代碼之前添加了這些按鈕,只需刪除這些分配即可。 – 2010-01-29 18:20:17

1

我不知道這是否可能,但我知道當你在設計器上拖動一個控件時,它的構造函數會被執行。這就是爲什麼你的按鈕一開始就是藍色的,並且之後不會改變顏色。

0

您正在爲BackColor屬性的構造函數中設置默認值,當您啓動設計器時,它實際上會從構造函數中設置默認值。