此之前已經多次發生過沒有初始化,但我從來沒有費心去搞清楚爲什麼,現在我累了:自定義用戶控件中自動生成的代碼
舉例來說,我得到從RichTextBox中類或面板,我重建我的項目,將類添加到VS設計器工具箱,然後我拖動自定義用戶控件到窗體。一切工作正常,我可以運行我的項目...
當我通過設計器編輯窗體或自定義用戶控件的屬性時,問題出現了。有時候,設計師會從代碼隱藏中刪除初始化行,導致設計器和可執行文件中出現異常,因爲控件仍未初始化。
換句話說,下面一行是從說,Form1.Designer.cs刪除:
this.customRichTextBox1=new CustomRichTextBox();
沒有其他線從代碼隱藏去除,所以自定義控件的屬性仍設置,儘管變量保持未初始化。
我的解決方案一直是在設計器後臺代碼中手動初始化我的用戶控件,但設計師最終再次將其刪除。
我相信當我通過設計器構建一個自定義用戶控件時不會發生這種情況(但我不完全確定這一點)。只有當我手動定義類似以下內容時纔會發生:
class CustomRichTextBox:RichTextBox{}
這太令人討厭了。我究竟做錯了什麼?
作爲@Cody請求,這裏是重現問題的步驟。我使用的是VS2010,但自2005年以來我就遇到了這個問題,我想。
步驟1.創建新的Windows窗體應用程序,任何框架
第2步:添加下面主窗體類以下類:(碰巧,這是導致我這個問題,本次的控制。 )
class CustomRichTextBox : RichTextBox
{
Timer tt = new Timer();
internal CustomRichTextBox()
{
tt.Tick += new EventHandler(tt_Tick);
tt.Interval = 200;
}
protected override void OnTextChanged(EventArgs e)
{
tt.Stop();
tt.Start();
}
void tt_Tick(object sender, EventArgs e)
{
System.Diagnostics.Trace.WriteLine("Hello world!");
}
}
第3步。按F6重建。
第4步。通過從工具箱中拖放,將CustomRichTextBox控件添加到窗體中。
第5步。如果你願意,你可以按F5來測試應用程序,但它應該工作。關閉運行的應用程序。
第6步。按F6重建,此時,設計人員應該崩潰並顯示以下消息:「變量'customRichTextBox1'是未聲明的或從未分配的。」 (在一種情況下,整個VS完全崩潰,但錯誤通常包含在設計器中。)
第7步。要糾正問題,請進入代碼隱藏並初始化變量,但下次重新構建,初始化線將消失。
幾天前發佈了類似的問題,但他們的問題和您的問題都沒有提供足夠的代碼來實際重現問題。我花了很多時間開發自定義控件庫並使用VS Designer,我從未見過這種情況。我並不否認這發生在你身上,但如果我自己無法再現問題,我無法幫助你找到解決方案。設計師有時候很古怪,但並不完全不可救藥。 – 2011-04-16 06:10:04
@Cody:感謝您的評論。我測試並添加了重現問題的步驟。我希望你能重現它。你是對的,設計師是一個非常強大的工具,它很少給我帶來麻煩。我會說這是唯一一個我必須與之戰鬥的實例......我相信這個問題與我通過自己輸入課程來創建控制的方式有關。 – 2011-04-16 06:36:23