【问题标题】:windows forms organize codewindows窗体组织代码
【发布时间】:2016-12-22 13:57:16
【问题描述】:

好的,这是我的第一个 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 等移动到不同的类(或不同的类),但在不破坏应用程序的情况下如何做到这一点几乎迷失了。好吧,private 显然设置为 public 以授予访问权限,但我不知道以后如何在 Form1 类中调用这些方法。当我创建新类然后尝试在事件上调用方法时,例如onClick: Newclass.method1() 它不起作用。我能想到的一件事就像在Form1 onClick: thisMethodCallsTheOneINeedInADifferentClass() 中调用一些方法,但这似乎是一个笨拙的解决方案......我确信有更好的方法来解决这个问题,我只是不知道该怎么做。多多指教,谢谢

【问题讨论】:

  • 我建议将事件处理程序留在表单中。
  • 如果您更好地定义“它不起作用”的含义,您可能会更幸运地获得所需的答案。编译器错误?碰撞?例外?

标签: c# winforms events


【解决方案1】:

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

YourClass class1 = new YourClass(); 

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

private static YourClass class1 = new YourClass();

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

class1.YourMethod();

【讨论】:

  • 或者将方法设为静态。
  • 是的,这将是更好的解决方案。我将编辑我的答案
  • 感谢您的推荐,这是它所采用的路径,它按预期工作。我没有将类设为静态,而是将其实例化。干杯
【解决方案2】:

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

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

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

我会说可以将事件处理程序放在后面的代码中,然后从您在其他地方编写的另一个类中调用某种规则方法。让一些代码存在于背后的代码中并不可耻。

最终,设计者必须指向正确的事件处理程序,如果将其移出 Form1.cs 类,则必须将其指向正确的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    相关资源
    最近更新 更多