C# 如何在windows窗体C中将方法移动到外部文件#

C# 如何在windows窗体C中将方法移动到外部文件#,c#,forms,file,methods,external,C#,Forms,File,Methods,External,新手问题:( 我正在用windows窗体制作一个程序,我有很多像这样的小方法 private void label1_Click(object sender, EventArgs e) { textBox1.Select(); } private void label13_Click(object sender, EventArgs e) { textBox13.Select(); } private v

新手问题:(

我正在用windows窗体制作一个程序,我有很多像这样的小方法

    private void label1_Click(object sender, EventArgs e)
    {
        textBox1.Select();
    }

    private void label13_Click(object sender, EventArgs e)
    {
        textBox13.Select();
    }

    private void radioButton1_CheckedChanged(object sender, EventArgs e)
    {
        plotGraph(prostokat);
    }

在Form1.cs文件中,为了使代码更透明,我想将这些小方法移到外部文件(类?)的某个地方,但我真的不知道如何做。如果它们是普通方法,我只会创建一个类,创建该类的对象,并使用该对象调用方法,但这些函数执行用户操作(即单击文本框)时“发生”,因此我不确定如何执行此操作。

可以为
表单1创建一个额外的
分部类(分隔文件),并将杂乱的方法放在那里

或者您可以使用
#region

#region UI Handlers


#endregion

完美的解决方案是在WinForms中使用某种MVVM。在这种情况下,在您的ViewModel中,您可以单独实现您的业务逻辑和代码。 看看这个:
希望有帮助!

查看一下您的表单类小节。在大多数情况下,它仍然是一个分部类。在项目的同一小节中创建一个新的.cs文件,并向其中添加另一个分部表单类

您可以在此处找到其他信息:

当然,您可以向项目中添加一个新类(在解决方案资源管理器-->添加类-->中右键单击该项目)并将您的方法放在那里。然后您需要将这些方法与代码中的控件挂钩:

我添加了一个名为“Form Methods”的静态类,并在其中为label1 Click事件放置了一个方法:

static class FormMethods
{
    public static void label1_Click(object sender, EventArgs e)
    {
        Label label = (Label) sender;

        // Try to find the textbox through the label's parent form
        TextBox textBox = (TextBox) label.Parent.Controls.Find("textBox1", true).First();

        if (textBox != null)
        {
            textBox.Select();
        }
    }
}
然后,在表单设计器代码中,可以连接事件:

this.label1.Click += new System.EventHandler(FormMethods.label1_Click);
或者,您可以使该类成为原始表单类的一部分,它仍然是一个单独的文件。如果您想这样做,您可以将事件设置为私有非静态方法,并将该类定义更改为公共部分类:

public partial class Form1 // <-- This used to be: static class FormMethods
{
    // This used to be: public static void label1_Click
    private void label1_Click(object sender, EventArgs e)
    {
        . . .

您可以根据功能需要创建任意数量的部分类文件,以模仿原始方法和内部分组方法-但是,您将无法使用设计器直接导航到回调。也就是说,如果双击图形元素或单击图形元素的事件,您将在这两种情况下都有意外行为在一些情况下,您将在第一个部分中生成一个事件处理程序,并为此创建一个钩子……因此,您无法再直接导航到这些处理程序,您需要遍历部分文件以查找它们的定义。

使用
部分
像这样拆分C代码

public partial class Employee
{
    public void DoWork()
    {
    }
}

public partial class Employee
{
    public void GoToLunch()
    {
    }
}

非常感谢你的回答!我还有两个额外的问题:1.这会被认为比用#区域折叠更专业吗?2.是否有一种方法可以创建一个类似“如果textbox2被更改,那么如果textbox3被更改,那么更改[2]的值,然后更改[3]的值”等的选项"?因为现在我有12个方法来处理12个文本框,有没有办法只有一个方法来处理所有的文本框?不,不是更专业。只有在让你的生活更轻松的情况下才这样做。是的,你可以创建一个方法来处理所有的文本框。创建方法,然后将每个控件事件连接到该方法。我看不到创建静态处理程序。这只会让它变得更困难。它不会节省内存。我完全同意。@Jeroen
public partial class Employee
{
    public void DoWork()
    {
    }
}

public partial class Employee
{
    public void GoToLunch()
    {
    }
}