C# windows窗体组织代码

C# windows窗体组织代码,c#,winforms,events,C#,Winforms,Events,好的,这是我的第一个windows窗体应用程序,我在重新构造代码时遇到了一些困难。开始将默认情况下提供的Form1类中的所有内容都放在一起,但它增长得太快了。我知道这是一个非常糟糕的编程实践,所以我开始了一些清理,并制作了不同的类来满足单一责任原则。然而,由于一些按钮相关和网格相关的事件在Form1类中运行良好,将它们带到外面会使它们崩溃,我不知道该如何做 public partial class Form1 { public Form1() { Initia

好的,这是我的第一个windows窗体应用程序,我在重新构造代码时遇到了一些困难。开始将默认情况下提供的
Form1
类中的所有内容都放在一起,但它增长得太快了。我知道这是一个非常糟糕的编程实践,所以我开始了一些清理,并制作了不同的类来满足单一责任原则。然而,由于一些按钮相关和网格相关的事件在
Form1
类中运行良好,将它们带到外面会使它们崩溃,我不知道该如何做

public partial class Form1
{


    public Form1()
    {
        InitializeComponent();

    }

    private void method1(object sender, EventArgs e)
    {
            //CODE
    }



    private void method2(object sender, DataGridViewCellEventArgs e)
    {
           //CODE
    }



    private void method3(object sender, EventArgs e)
    {
          //CODE
    }

}

因此,我想将
method1
method2
method3
等移动到不同的类(或不同的类),但对于如何在不破坏应用程序的情况下实现这一点,我几乎不知所措。很明显,private设置为public以授予访问权限,但我不知道以后如何在Form1类中调用这些方法。当我创建新类,然后尝试在事件上调用方法时,比如
onClick:Newclass.method1()
它不起作用。我能想到的一件事是调用
表单1中的某个方法onClick:this方法调用differentitclass()中的某个方法,但这似乎是一个笨拙的解决方案。。。我确信有更好的方法来解决这个问题,我只是不知道如何解决。感谢您的建议

您应该将事件处理程序保留在表单中,但您可以将代码移动到另一个类中。如果你想给你的班级打电话,你不能直接打电话。您需要这样做:

YourClass class1 = new YourClass(); 
class1.YourMethod();
您也可以将其声明为静态,然后只需调用一次

private static YourClass class1 = new YourClass();
然后您可以像这样使用您的方法:

YourClass class1 = new YourClass(); 
class1.YourMethod();

这些是按钮事件的事件处理程序。如果希望在其他地方指定该方法,则必须手动连接事件处理程序 在你的代码背后

现在连线的代码在设计器文件中,您将看到如下内容:

button1.Click += new System.EventHandler(method1);
我想说,让事件处理程序位于代码隐藏中并从其他地方编写的另一个类中调用某种规则方法是可以的。让一些代码活在代码背后并不丢脸


在一天结束时,设计者必须指向正确的事件处理程序,如果您将其移出Form1.cs类,则必须将其指向正确的位置。

我建议将事件处理程序留在表单中。如果您更好地定义“它不起作用”的含义,您可能会更幸运地得到所需的答案。编译器错误?崩溃异常?或者使方法静态。是的,这将是更好的解决方案。我会编辑我的回答谢谢你的建议,这是它所走的道路,它的工作如预期。我并没有使这个类成为静态的,而是实例化了它。干杯