0

当我在我的 Windows 窗体中的控件上附加一个事件时,我遇到了一个问题,即在一段时间后,它会自动与它分离。让我解释一下,例如,如果我有这行代码:

this.btnMainMove.MouseMove += btnMainMove_MouseMove;

然后我将btnMainMove_MouseMove在表单代码中编写该方法,它运行了几次,但在设计器文件中,上面编写的行会自动删除,我只保留表单代码文件中的方法。

这件事不会发生在Click事件上,而只会发生在我创建的方法上,比如MouseMove, MoseOver, KeyDown.

我想知道为什么会发生这种情况以及如何防止这种情况发生。

谢谢你们!

4

4 回答 4

0

我不知道有什么问题,但我可以建议你使用 lambda 表达式而不是设计器

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

但是不要在 Visual Studio 的 GUI 中单击事件来执行此操作,因此您不使用设计器。

于 2013-04-04T08:25:14.160 回答
0

您是否正在手动编辑 *.designer.cs 文件?最好避免它,但您可以在构造函数中订阅此事件,就在 InitializeComponent() 方法之后。

于 2013-04-04T08:57:48.053 回答
0

设计器仅在 *.Designer.cs 文件中进行更改...

如果您在构造函数或表单的加载事件中添加处理程序,则设计器不会删除您的代码。

于 2013-04-04T09:20:58.317 回答
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文件、编译等之后自动执行。

将您的事件附加到构造函数中、加载时或使用可视化设计器(它将根据布局文件和其他类似的东西跟踪需求,但出于您的考虑)。

于 2013-04-04T10:53:47.417 回答