在另一个.cs文件类中使用一个.cs文件类中的方法

我有2个.cs文件,每个文件都有一个类。 如何从Form2.cs中另一个类的Form1.cs中调用类中的方法?

看起来像这样……

Form1.cs public partial class Class1 : ClassContainer { public void awesomeMethod() { } } Form2.cs class Class2 : SomethingChanged { public void decentMethod() { } } 

我想在decentMethod()中调用awesomeMethod()。 谢谢。

你的意思是,像这样?

 public void decentMethod() { Class1 instance = new Class1(); instance.awesomeMethod(); } 

您需要要调用方法的类的实例。


或者,如果您不需要/想要使用实例,请将其设为静态方法:

 public partial class Class1 : ClassContainer { public static void awesomeMethod() { } } 

 public void decentMethod() { Class1.awesomeMethod(); } 

为了调用类的实例方法,您需要一个类的实例。 因此,要调用Class1的awesomeMethod,您必须创建Class1的实例:

 Class1 c = new Class1(); c.awesomeMethod(); 

但是,从你的开头段开始,听起来两个实际的类是两种不同的forms。 在这种情况下,一个表单创建另一个表单的新实例纯粹是为了获得可能是一个帮助方法的东西并没有意义 – 创建第二个表单可能是一个非常大的开销。 将helper方法放入一个单独的,更轻量级的类中会更好。

我猜这些不是真正的方法签名。

awesomeMethod是否需要对awesomeMethod任何成员的任何引用?

如果没有,它将如此简单:

 new Class1().awesomeMethod(); 

您可以在Visual Studio中尝试以下操作。 在没有定义的情况下编写您对方法的使用 。 例如,在代码中的某处,键入:

cls_a instance_a;

然后你会在cls_a下得到一条波浪线。 右键单击“cls_a”并从弹出菜单中选择generate。 然后看看会发生什么。

我看到创建了App_Code目录,并且在该目录中的文件cls_a.cs中生成了类cls_a。 Visual Studio生成了该定义。 它编译。

然后,您可以在没有cls_a定义的情况下键入方法的使用,如下所示:

instance_a.meth_x();

再次,右键单击波浪线并选择生成。 让Visual Studio为您生成定义。

我认为ASP .NET要求您将其他类放在App_Code子目录中。 如果您需要按照自己的方式弯曲ASP.NET,我认为可以编辑Web.config文件,以便将代码文件放在任何需要的位置。 我还没有审查过如何做到这一点,所以我把它留给你或其他人。

无论如何,在App_Code子目录中没有您的类和方法可能会导致您的类和函数无法在您的Web表单代码中看到,即使其他一切都是正确的。

好吧,我是初学者,并想知道同样的事情。 我相信我明白你在问什么。 我只是尝试了这一点,经过几次尝试后点击,并且对此更新,也许我可以用我的话简化它。 我不知道你使用的是哪个程序但我使用的是Visual Studio 2016.我创建了两个表单(Form1和Form2),每个表单都包含一个按钮。 Form1按钮和Form2按钮。 当我单击Form1按钮时,它从form2调用一个方法,当我单击Form2按钮时,它调用Form1中的方法。 我注意到在解决方案资源管理器中它显示了两种forms,以及它们包含的所有内容。 我做了很多研究并纠正了我,如果我错了,但我相信从父容器到子容器(Namespace> Class> Method)的顺序是这样的。 相信这是真的我认为我需要在调用该方法之前调用该类。

这些是我的脚本。

Form1:

 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Form2 frm2 = new Form2(); frm2.Show(); } private void f1button_Click(object sender, EventArgs e) { f2Words f2w = new f2Words(); f2w.Words2(); } } public class f1Words { public void Words1() { MessageBox.Show("Form 1 Method Calling Worked!"); } } 

窗体2:

 public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { } private void f2button_Click(object sender, EventArgs e) { f1Words f1w = new f1Words(); f1w.Words1(); } } public class f2Words { public void Words2() { MessageBox.Show("Form 2 Method Calling Worked!"); } } 

在Solution Explorer窗口中,它显示Form1和Form2的类。 所以我决定尝试调用这些类的新实例。

“f1Words f1w = new f1words()”和“f2Words f2w = new f2Words()”。

然后就在这之后,我将这些类的新实例用它们包含的方法调用。

“f1w.Words1()”和“f2w.Words2()”

最终结果是成功。 当我单击Form1的Button1时,它调用Form2的F2Words类并从中拉出Words2方法,打开一个消息框,说“Form2 Method Called Worked!”,反之亦然,Form2 Button2。

由于这篇文章已有4年历史,我认为你已经发现了这个问题并且可能找到了更好的解决方案,但是对于其他人在将来问这个问题我希望这可以帮到你。

假设主要forms是frmMain。 在frmMain()的构造函数外部进行静态声明; 在同一个构造函数中分配它:

 public static frmMain p_frmMain = null; public frmMain() { InitializeComponent(); : p_frmMain = this; } 

从另一个类(在同一个解决方案中使用main的命名空间),调用,例如,main的’btnHelloWorld_Click()’方法:

 AnotherClass_EventHandler(object sender, EventArgs e) { : // Call frmmain()'s 'btnHelloWorld_Click' event: frmMain.p_frmMain.btnHelloWorld_Click (sender, e); : } // Quick, dirty and done.