Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual C#GUI设计器-删除生成的事件处理程序代码的推荐方法_C#_Gui Designer - Fatal编程技术网

Visual C#GUI设计器-删除生成的事件处理程序代码的推荐方法

Visual C#GUI设计器-删除生成的事件处理程序代码的推荐方法,c#,gui-designer,C#,Gui Designer,我是Visual C#designer的新手,所以这些都是关于如何与设计师合作的基本问题 例如,当我们向表单添加标签,然后在Visual C#designer(我使用的是Microsoft Visual C#2008 Express Edition)中双击它时,会发生以下情况: 设计器在Form1.designer.cs中生成代码(为简单起见,采用默认名称)以添加标签 然后双击它将使用以下代码将事件处理程序标签添加到Form1.Designer.cs中的标签中 this.label1.Click

我是Visual C#designer的新手,所以这些都是关于如何与设计师合作的基本问题

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

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

    this.label1.Click+=newsystem.EventHandler(this.label1\u Click)

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

    private void label1_Click(object sender, EventArgs e)
    {
    
    }
    
    如果我现在删除标签,那么只有Form1.Designer.cs中的代码将被删除,但是label1\u Click方法将保留在Form1.cs中,即使它没有被其他任何东西使用。但是如果我在设计器中使用reset intheproperties->Events作为Click事件,甚至Form1.cs中的label1\u Click方法都会被删除

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

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

    3.)使用设计师的最佳“心理方法”/“最佳实践”是什么


    我会通过精神分离的方式来处理它,Form1.cs是我100%的责任,另一方面,我根本不涉及Form1.Designer.cs中的代码。这有意义吗?由于有时设计师会从Form1.cs中删除某些内容,我对此不确定。

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

    例如:

    • 添加按钮和单击事件
    • 参考按钮A从另一个按钮B单击事件
    • 移除按钮A
      • 如果代码消失,则按钮B将断开
      • 如果代码仍然存在,则按钮B继续工作
    我通常会注释掉designer.cs文件中的任何代码(事件处理程序)。

    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形式,您可能永远不需要知道事件参数的类型…

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