Windows窗体组织代码

时间:2016-12-22 13:57:16

标签: c# winforms events

好的,这是我的第一个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
    }

}

所以我想将method1method2method3等移到另一个班级(或不同的班级),但如果没有这样做,我几乎失去了打破了应用程序。好吧,私有显然设置为公共授予访问权限,但我不知道如何在Form1类中调用这些方法。当我创建新类然后尝试在事件上调用方法时,例如onClick: Newclass.method1()它没有工作。我能想到的一件事就是在Form1 onClick: thisMethodCallsTheOneINeedInADifferentClass()中调用一些方法,但这似乎是一个笨拙的解决方案......我确信有更好的方法来解决这个问题我只是不要知道怎么。建议表示赞赏,谢谢

2 个答案:

答案 0 :(得分:3)

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

YourClass class1 = new YourClass(); 

您也可以将其声明为静态,然后您只需要调用一次。

private static YourClass class1 = new YourClass();

然后你可以像这样使用你的方法:

class1.YourMethod();

答案 1 :(得分:0)

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

现在接线的代码在设计器文件中,你会看到类似的东西:

button1.Click += new System.EventHandler(method1);

我会说事件处理程序在后面的代码中是可以的,只需从你在别处编写的另一个类调用某种规则方法。让一些代码存在于背后的代码中并不可耻。

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