2013-04-04 63 views
0

當我在Windows窗體中的控件上附加事件時,我遇到了幾個問題,它會自動分離它。讓我來解釋,例如,如果我有這行代碼:事件自動分離

this.btnMainMove.MouseMove += btnMainMove_MouseMove; 

然後我會寫在表格代碼的方法btnMainMove_MouseMove,它可以很好地用於了幾次,但隨後在設計文件上面寫的行自動刪除,我只保留在表單代碼文件中的方法。

這件事情不會發生在Click事件中,但僅限於我創建的方法,如MouseMove,MoseOver,KeyDown

我想知道爲什麼會發生這種情況,以及如何防止這種情況發生。

謝謝大家!

+1

你在哪裏附加活動?它在Form_Load中嗎?你有什麼行動嗎?你能更具體地說'幾次之後'嗎? – Ruly 2013-04-04 08:42:52

+0

您可以在您正在編輯的文件的開頭打印評論嗎? – Default 2013-04-04 09:01:29

+0

在我的Designer.cs的開頭沒有評論。我從命名空間開始,然後使用usings,class等等。 – BlackShawarna 2013-04-04 11:11:27

回答

0

設計文件一般也標有像這樣的消息:

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated by a tool. 
//  Runtime Version:4.0.30319.18034 
// 
//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

的信息是很清楚的。更改可能會丟失。

這些類型的文件,例如,經常有可以手動(使用上下文菜單選項)執行,但是最常自動執行,節省了伴隨*.cs文件,編譯後的工具等

連接你的事件在構造函數中,在加載時,或使用可視化設計器(它將跟蹤基於佈局文件和其他類似事情的需求,但不在你的擔憂之中)。

+0

所以如果我想寫我的事件。CS文件我必須寫在構造函數或下載事件?如果我有webbrowser_DocumentCompleted事件,我怎麼能把它放在Form_Load中?它沒有任何意義。 – BlackShawarna 2013-04-04 11:24:08

+0

你訂閱你的事件處理程序的構造函數或加載事件,定義處理器邏輯旁邊的事情,而不是在他們內部,_would_使廢話。 – 2013-04-04 11:27:29

+0

好吧,我誤解了。現在我明白了,謝謝! – BlackShawarna 2013-04-04 12:17:01

0

我不知道有什麼問題,但我可以建議你使用lambda表達式,而不是設計師

this.btnMainMove.MouseMove += (sender,event) => 
{ 
    //your event logic here 
}; 

,但這樣做沒有點擊事件在Visual Studio的GUI,這樣你就不能使用設計師。

0

您是否正在編輯* .designer.cs文件manualy? 儘量避免它,但您可以在構造函數中訂閱此事件,緊接在InitializeComponent()方法之後。

+0

謝謝!我不知道。 – BlackShawarna 2013-04-04 12:19:21

0

設計者進行更改只在*了.Designer.cs文件...

如果您在構造函數或形式的負載事件中添加處理程序設計師不會刪除你的代碼。