我創建像這樣(簡單的例子)的自定義用戶控件:如何創建更新設計器的.NET winforms自定義控件?
public class MyButton : Button
{
public MyButton()
{
BackColor = Color.Blue;
}
}
編譯後,它出現在表單設計工具箱,並顯示與更新的屬性。但是,如果我改變顏色,我已經在窗體上使用的控件保持其原始顏色。
有沒有一種方法來設計一個控制器,將它的變化傳播給設計師?
我創建像這樣(簡單的例子)的自定義用戶控件:如何創建更新設計器的.NET winforms自定義控件?
public class MyButton : Button
{
public MyButton()
{
BackColor = Color.Blue;
}
}
編譯後,它出現在表單設計工具箱,並顯示與更新的屬性。但是,如果我改變顏色,我已經在窗體上使用的控件保持其原始顏色。
有沒有一種方法來設計一個控制器,將它的變化傳播給設計師?
問題是,在編輯類之前,您在表單上放下的按鈕已被表單的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; }
}
}
從技術上講,這適用於窗體上的單個控件。當我將第二個控件放到窗體上,然後更改顏色時,原始顏色仍然存在。有任何想法嗎? – 2010-01-29 18:04:54
查看Designer.cs文件並確保未分配BackColor屬性。如果在更改代碼之前添加了這些按鈕,只需刪除這些分配即可。 – 2010-01-29 18:20:17
我不知道這是否可能,但我知道當你在設計器上拖動一個控件時,它的構造函數會被執行。這就是爲什麼你的按鈕一開始就是藍色的,並且之後不會改變顏色。
您正在爲BackColor屬性的構造函數中設置默認值,當您啓動設計器時,它實際上會從構造函數中設置默認值。
當你說你改變顏色,你的意思是你改變的代碼行「BackColour = Color.Blue」還是你通過改變控制的1個實例的屬性VS屬性頁面? – 2010-01-29 15:06:55
我改變了代碼行 – 2010-01-29 15:12:14
當發生如果你然後運行整個應用程序(F5)所有的控件更新/更改呢? – 2010-01-29 15:16:49