【问题标题】:Why is the Debugger deleting my code?为什么调试器会删除我的代码?
【发布时间】:2014-10-12 11:37:50
【问题描述】:

使用 VS2013 Pro、WinForms,调试器不断删除我的事件处理程序。 (我将它们放在 Form.Designer.cs 文件中)

我最近才开始注意到它,我很肯定我没有更改任何设置。

其他人可以复制这个还是只是我系统上的东西?

复制步骤:

  1. 创建新项目 C# WinForms
  2. 添加拆分容器 > 在基本容器的第二个面板内,嵌套另一个拆分容器。
  3. 在 Form.Designer.Cs 文件中,将 Click 事件处理程序连接到嵌套面板 1 容器。
  4. 运行。 - 单击容器 - 应该可以正常工作。
  5. 退出调试器 > 更改嵌套面板 1 的颜色属性。
  6. 运行 > 不能再点击?
  7. 检查代码 > 事件处理程序已被删除?

【问题讨论】:

  • Form.Designer.cs 是那个说“不要修改”的吗?如果将代码放入Form.cs 会发生什么
  • 是的,我知道,但我一直在那里写代码!保持整洁。
  • @KidCode 您认为不应该手动修改文件的警告是个好主意吗?
  • 具有讽刺意味的标签:样板文件进入 Xyz.Designer.cs 文件以保持 Xyz.cs 文件整洁。
  • 我应该更清楚。我的意思是文件顶部没有警告(如svcutil 的“由工具生成”),但InitializeComponent 有。

标签: c# winforms visual-studio visual-studio-debugging


【解决方案1】:

如果您手动添加了事件处理程序,那么只要您从设计器中更改某些内容,Form.Designer.cs 就会重新生成,并将删除您的事件处理程序(在代码中手动添加的事件处理程序)

您需要做的是从 Control 属性中添加事件处理程序。

例如,如果您在设计器中编写此代码:

myControl.Click += myClickHandler; 

只要您在设计器中更改某些内容,它就会被删除,因为整个 .Designer.cs 文件会重新生成,并且出于某种原因 VS 不知道手动添加的事件处理程序。

您会看到,如果您从控件属性窗口(在设计器中)添加事件处理程序,生成的代码将如下所示:

myControl.Click += new EventHandler(myClickHandler);

另一种解决方法是在 .Designer.cs 类之外添加处理程序,但简单的方法是从 Designer 添加处理程序:)。

【讨论】:

    猜你喜欢
    • 2020-12-24
    • 2012-01-02
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    相关资源
    最近更新 更多