我正在創建一個黑色背景的自定義控件,但與設計者有一些問題。真相被告知我有一個基本控制類繼承UserControl
,然後一些子類代表我將在我的GUI中使用的最終控件。在該基類中,我重寫BackColor
屬性,添加DefaultValue
屬性並在構造函數中將默認值設置爲BackColor
。作爲一個例子我的代碼看起來是這樣的:在usercontrol中更改默認背景的問題
public partial class MyControl1 : UserControl
{
public MyControl1()
{
InitializeComponent();
BackColor = Color.Black;
}
[DefaultValue(typeof(Color),"Black")]
public override Color BackColor
{
get
{
return base.BackColor;
}
set
{
base.BackColor = value;
}
}
}
...
public partial class MyControl2 : MyControl1
{
public MyControl2()
{
InitializeComponent();
}
}
的事情是我每次打開設計時間MyControl2
,BackColor
對話框恢復到System.Drawing.SystemColors.Control
和我的控件的屬性被塗成灰色。如果我調用BackColor
上的重置,它會正確返回到Color.Black
。此外,設計者不會將更改序列化到System.Drawing.SystemColors.Control
,直到對控件進行其他更改。
那麼,我嘗試了什麼?
我想作爲一個環境屬性,所以我嘗試添加屬性
AmbientValue(false)
它可能與BackColor
。當然,它不起作用。我試着擦除重寫的屬性,在構造函數中只留下了
BackColor=Color.Black
。令人驚訝的是,它解決了設計師的問題,但現在重置該屬性將其恢復爲默認值System.Drawing.SystemColors.Control
。重寫ResetBackColor()
並未解決最後一個問題。
順便說一句,我在Visual Studio 2010下工作,我的項目是作爲.NET 2.0 Windows窗體應用程序創建的。
我很高興是否有人能幫我找到我的代碼中有什麼問題。這不會阻止我完成這個項目,但這非常煩人。非常感謝您提前!
只存在於設計師的問題? I.E.當你使用你的控件運行一個應用程序時,它是否像預期的那樣工作? – Sacrilege
是的,它的行爲正確,直到設計師序列化到BackColor的變化,只有在對控件的其他屬性進行更改後纔會發生變化。這就是爲什麼它如此煩人的原因之一 – Anarion