当我在Windows窗体中的控件上附加事件时,我遇到了一个问题,经过一段时间后,它会自动脱离。让我解释一下,例如,如果我有这行代码:
this.btnMainMove.MouseMove += btnMainMove_MouseMove;
然后我会在表单代码中编写方法btnMainMove_MouseMove
,它可以运行几次,但是在设计器文件中,上面写的行自动删除,我只保留表单中的方法代码文件。
Click
事件不会发生这种情况,但仅针对我创建的方法MouseMove
,MoseOver
,KeyDown
。
我想知道为什么会发生这种情况以及如何防止这种情况发生。
谢谢大家!
答案 0 :(得分:0)
我不知道问题是什么,但我可以建议你使用lambda表达式而不是设计师
this.btnMainMove.MouseMove += (sender,event) =>
{
//your event logic here
};
但是在没有单击Visual Studio GUI中的事件的情况下执行此操作,因此您不使用设计器。
答案 1 :(得分:0)
您是手动编辑* .designer.cs文件吗? 最好避免它,但你可以在构造函数中订阅此事件,就在InitializeComponent()方法之后。
答案 2 :(得分:0)
设计人员仅在* .Designer.cs文件中进行更改...
如果在构造函数或表单的Load-Event中添加处理程序,设计人员将不会删除您的代码。
答案 3 :(得分:0)
Designer文件通常标有如下消息:
//------------------------------------------------------------------------------
// <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
文件,编译等后自动执行。
将您的事件附加到构造函数中,加载时或使用可视化设计器(它将根据布局文件和其他此类内容跟踪需求,但出于您的考虑)。