C# 一个连接程序.cs和Form.cs

C# 一个连接程序.cs和Form.cs,c#,winforms,methods,static,C#,Winforms,Methods,Static,我想在program.cs中调用Form.cs中的函数 但是如果函数不是静态的,program.cs就不能使用它。如果它是静态的,Form.cs就不能使用它,因为它涉及的控件不是静态的 我可以删除我的program.cs代码,并找到一种在form.cs中执行相同操作的方法,但我想知道是否有更简单的方法 这通常是form.cs中的函数所做的 public void Toggle() { MyDomainUpDown.SelectedIndex = 3; } 该计划

我想在program.cs中调用Form.cs中的函数

但是如果函数不是静态的,program.cs就不能使用它。如果它是静态的,Form.cs就不能使用它,因为它涉及的控件不是静态的

我可以删除我的program.cs代码,并找到一种在form.cs中执行相同操作的方法,但我想知道是否有更简单的方法

这通常是form.cs中的函数所做的

public void Toggle()
    {
        MyDomainUpDown.SelectedIndex = 3;
    }
该计划包括:

MainForm.Toggle();

表单实例应该是在program.cs中创建的,因此您可以从那里访问公共/内部实例方法

Program.cs的默认实现大致如下:

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }
}
newmainform()
创建表单的实例。只需将其分配给局部变量即可调用其方法:

        var mainForm = new MainForm();
        mainForm.MethodToCall();
        Application.Run(mainForm);

我不确定您的情况是什么,但如果您没有对myForm的引用,为什么或何时要调用myForm中定义的任何非静态方法

另一方面,如果您有对它的引用,则只需将
MyFunction
公开并正常调用它:

 class Program
 {
     MyForm myForm = new MyForm();
     ....
     myForm.MyFunction(); //call here
 }

 public partial class MyForm: Form
 {
     ....
     public int MyFunction() {...}
 }
您还可以将其设置为静态,并在函数的参数中添加对MyForm实例的引用(如果有实际原因)

 public partial class MyForm: Form
 {
     ....
     public static int MyFunction(MyForm myForm) {...}
 }

为什么不能从program.cs访问它

您可以轻松定义一个变量来保存表单,然后引用它:

static class Program
{
    // Any method can now access the form
    static Form1 MyForm;

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        MyForm = new Form1();
        Application.Run(MyForm);
    }

}

这将有助于查看函数的原型。