连接程序.cs和窗体.cs
本文关键字:cs 窗体 连接 程序 | 更新日期: 2023-09-27 17:58:08
我的Form.cs中有一个函数,我想在我的程序.cs 中调用它
但是,如果函数不是静态的,program.cs就不能使用它。如果它是静态的,Form.cs就无法使用它,因为它涉及非静态的控件。
我可以删除我的program.cs代码,并在我的form.cs中找到同样的方法,但我想知道是否有更简单的方法。
这通常是表单.cs中的函数所做的
public void Toggle()
{
MyDomainUpDown.SelectedIndex = 3;
}
程序.cs:
MainForm.Toggle();
为什么不能从程序.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);
}
}
我不确定您的情况,但如果您没有对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) {...}
}
Form实例应该是在program.cs中创建的,因此您可以从那里访问公共/内部实例方法。
Program.cs的默认实现或多或少是这样的:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
new MainForm()
创建表单的实例。只需将其分配给一个局部变量即可调用其方法:
var mainForm = new MainForm();
mainForm.MethodToCall();
Application.Run(mainForm);