好的,这是我的第一个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
等移到另一个班级(或不同的班级),但如果没有这样做,我几乎失去了打破了应用程序。好吧,私有显然设置为公共授予访问权限,但我不知道如何在Form1类中调用这些方法。当我创建新类然后尝试在事件上调用方法时,例如onClick: Newclass.method1()
它没有工作。我能想到的一件事就是在Form1 onClick: thisMethodCallsTheOneINeedInADifferentClass()
中调用一些方法,但这似乎是一个笨拙的解决方案......我确信有更好的方法来解决这个问题我只是不要知道怎么。建议表示赞赏,谢谢
答案 0 :(得分:3)
您应该在表单中保留事件处理程序,但您可以将代码移动到另一个类。如果你想给你的班级打电话,你就不能直接打电话给你。你需要做这样的事情:
YourClass class1 = new YourClass();
您也可以将其声明为静态,然后您只需要调用一次。
private static YourClass class1 = new YourClass();
然后你可以像这样使用你的方法:
class1.YourMethod();
答案 1 :(得分:0)
这些是按钮事件的事件处理程序。如果您想在其他地方指定方法,则必须手动连接事件处理程序 在你的代码背后。
现在接线的代码在设计器文件中,你会看到类似的东西:
button1.Click += new System.EventHandler(method1);
我会说事件处理程序在后面的代码中是可以的,只需从你在别处编写的另一个类调用某种规则方法。让一些代码存在于背后的代码中并不可耻。
在一天结束时,设计人员必须指向正确的事件处理程序,如果将其移出Form1.cs类,则必须将其指向正确的位置。