2013-04-04 58 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文件...

如果您在构造函数或形式的负载事件中添加处理程序设计师不会删除你的代码。