我有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()。 感谢。
答案 0 :(得分:6)
你的意思是,像这样?
public void decentMethod()
{
Class1 instance = new Class1();
instance.awesomeMethod();
}
您需要一个要调用该方法的类的实例。
或者,如果您不需要/想要使用实例,请将其设为静态方法:
public partial class Class1 : ClassContainer
{
public static void awesomeMethod()
{
}
}
...
public void decentMethod()
{
Class1.awesomeMethod();
}
答案 1 :(得分:4)
为了调用类的实例方法,您需要一个类的实例。因此,要调用Class1的awesomeMethod,必须创建Class1的实例:
Class1 c = new Class1();
c.awesomeMethod();
从你的开头段落来看,听起来两个实际的类是两种不同的形式。在这种情况下,一个表单创建另一个表单的新实例纯粹是为了获得可能是一个帮助方法的东西并没有意义 - 创建第二个表单可能是一个非常大的开销。将helper方法放入一个单独的,更轻量级的类中会更好。
答案 2 :(得分:0)
我猜这些不是真正的方法签名。
awesomeMethod
是否需要对decentMethod
的任何成员进行任何引用?
如果没有,那就简单如下:
new Class1().awesomeMethod();
答案 3 :(得分:0)
您可以在Visual Studio中尝试这些内容。写下 方法的 使用 ,不用 定义。例如,在代码中的某处,键入:
cls_a instance_a;
然后你在cls_a下得到一条波浪线。右键单击“cls_a”并从弹出菜单中选择generate。然后看看会发生什么。
我看到创建了App_Code目录,并且在该目录中的文件cls_a.cs中生成了类cls_a。 Visual Studio生成了该定义。它编译。</ p>
然后,您可以键入使用没有cls_a定义的方法,如下所示:
instance_a.meth_x();
再次,右键单击波浪线并选择生成。让Visual Studio为您生成定义。
我认为ASP .NET要求您将其他类放在App_Code子目录中。如果你需要按照自己的方式弯曲ASP.NET,我认为可以编辑Web.config文件,这样你就可以将代码文件放在任何你想要的位置。我还没有审查过如何做到这一点,所以我把它留给你或其他人。
无论如何,在App_Code子目录中没有您的类和方法可能导致您的类和函数无法在您的Web表单代码中看到,即使其他一切都是正确的。
答案 4 :(得分:0)
好的,我是初学者并且想知道同样的事情。我相信我明白你在问什么。我只是尝试了这个,经过几次尝试后点击,并且对此更新,也许我可以用我的话简化它。我不知道你正在使用哪个程序但我使用的是Visual Studio 2016.我创建了两个表单(Form1和Form2),每个表单都包含一个按钮。 Form1按钮和Form2按钮。当我单击Form1按钮时,它从form2调用一个方法,当我单击Form2按钮时,它调用Form1中的方法。我注意到在解决方案资源管理器中它显示了两种形式,以及它们包含的所有内容。我做了很多研究并纠正了我,如果我错了,但我相信从父容器到子容器(Namespace&gt; Class&gt; 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的类。所以我决定尝试调用这些类的新实例。
&#34; f1Words f1w = new f1words()&#34;和&#34; f2Words f2w = new f2Words()&#34;。
然后就在这之后,我将这些类的新实例用它们包含的方法调用。
&#34; f1w.Words1()&#34;和&#34; f2w.Words2()&#34;
最终结果是成功。当我单击Form1的Button1时,它调用了Form2的F2Words类,并将Words2方法拉出来,打开一个消息框,说“&#34; Form2方法调用工作!&#34;”,反之亦然Form2 Button2。
由于这篇文章已有4年历史,我认为你已经自己发现了这个问题并且可能找到了更好的解决方案,但是对于其他人在将来问这个问题我希望这可以帮助你解决问题。 / p>
答案 5 :(得分:0)
假设主要表格是frmMain。在frmMain()的构造函数外部进行静态声明;在同一个构造函数中分配它:
public static frmMain p_frmMain = null;
public frmMain()
{
InitializeComponent();
:
p_frmMain = this;
}
从另一个班级(在同一个解决方案中使用主要名称空间),打电话,比如,主要&#39; btnHelloWorld_Click()&#39;方法:
AnotherClass_EventHandler(object sender, EventArgs e)
{
: // Call frmmain()'s 'btnHelloWorld_Click' event:
frmMain.p_frmMain.btnHelloWorld_Click (sender, e);
:
}
// Quick, dirty and done.