【问题标题】:Visual C# GUI Designer - Recommended way of removing generated event handler-codeVisual C# GUI Designer - 删除生成的事件处理程序代码的推荐方法
【发布时间】:2010-03-31 00:18:10
【问题描述】:

我是 Visual C# 设计器的新手,所以这些是关于如何与设计器合作的一般且非常基本的问题。

例如,当我们向表单添加标签,然后在 Visual C# 设计器中双击它(我使用的是 Microsoft Visual C# 2008 Express Edition)时,会发生以下情况:

  1. 设计器在 Form1.Designer.cs 中生成代码(为简单起见采用默认名称)以添加标签,
  2. 然后双击它会将事件处理程序 label1_Click 添加到 Form1.Designer.cs 内的标签中,使用以下代码

    this.label1.Click += new System.EventHandler(this.label1_Click);

并将事件处理方法添加到 Form1.cs

private void label1_Click(object sender, EventArgs e)
{

}

如果我现在删除标签,则只会删除 Form1.Designer.cs 中的代码,但 label1_Click 方法将保留在 Form1.cs 中,即使它没有被其他任何东西使用。但是,如果我在设计器中对 Click-event 使用 Properties->Events 中的重置,即使 Form1.cs 中的 label1_Click 方法也将被删除。

1.) 这不是有点不一致的行为吗?

2.) 删除此类生成的事件处理程序代码的推荐方法是什么?

3.) 使用设计器的最佳“思维方式”/最佳实践是什么?

我会通过心理分离的方式来处理它,Form1.cs 是我 100% 的责任,另一方面,我根本不接触 Form1.Designer.cs 中的代码。这有意义吗?因为有时设计师会删除某事。来自 Form1.cs 我不确定。

【问题讨论】:

  • 我只是删除了孤立的事件处理程序。

标签: c# gui-designer


【解决方案1】:

1) 是的,它是不一致的。一点。 2)我使用了更简单的方法:简单地清除所有句柄代码并尝试编译 => 编译器会告诉您在哪里清除事件分配。尽管看起来很吓人,但它确实很安全。 3)这是我推荐并在我的软件部门强制执行的最佳实践: 3a)切换到WPF(单独询问最佳WPF实践;还有很多其他问题); 3b) 永远不要让 Visual Studio 自动生成事件代码(WPF 或 Windows.Forms);万一发生意外使用(2)尽快; 3b) 对于事件分配,使用匿名 lambda:

ByButton.Click += (source, evArg) => { SomeHandler(...); };

对于 v.2.0:

ByButton.Click += delegate(object source, EventArgs evArgs) { SomeHandler(...); };

有很多好处:您的处理程序不必使用特定的方法配置文件;您可以将整个代码放在匿名处理程序中,它是否足够短,以 lambda 形式您可能永远不需要知道事件参数的类型...

【讨论】:

    【解决方案2】:

    Visual Studio 中可能内置了一个安全元素。

    例如:

    • 添加一个按钮A和一个点击事件。
    • 从另一个按钮 B 引用按钮 A 的点击事件。
    • 删除按钮 A
      • 如果代码运行,那么按钮 B 会中断
      • 如果代码仍然存在,则按钮 B 将继续工作。

    我通常会注释掉任何在 Designer.cs 文件中中断的代码(事件处理程序)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 2010-11-14
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多