[英]Call a public method of main class from another class
我的主要Form1.cs如下
public partial class Form1: Form
{
Test _Test = new Test()
public Form1()
{
InitializeComponent();
_Test._TestMethod();
}
public void _MainPublicMethod(string _Message, string _Text)
{
MessageBox.Show(_Message);
TextBox1.Text = Text;
}
}
我的Test.cs如下
class Test
{
Form1 _Form1 = new Form1();
public void _TestMethod()
{
_Form1._MainPublicMethod("Test Message", "Test Text");
}
}
當我調試項目時,代碼不起作用。
先感謝您。
您可以修改此代碼,添加括號()
Form1 _Form1 = new Form1();
我猜您想在所有者表單上調用mainpublic方法,而不是所有者表單的新實例。 像這樣:
public partial class Form1: Form
{
Test _Test = new Test()
public GrabGames()
{
InitializeComponent();
_Test._TestMethod(this); //pass this form to the other form
}
public void _MainPublicMethod(string _Message, string _Text)
{
MessageBox.Show(Message);
TextBox1.Text = Text;
}
}
class Test
{
public void _TestMethod(Form1 owner)
{
//call the main public method on the calling/owner form
owner._MainPublicMethod("Test Message", "Test Text");
}
}
您的代碼顯示出常見的誤解(或缺乏對基本OOP原理的理解)。
當在form1內部,您的代碼調用_Test._TestMethod()時,您正在調用的方法“屬於”在form1中定義和初始化的Test類的實例。 反過來,該實例嘗試調用在Form1類中定義的方法_MainPublicMethod。 但是,因為調用該方法(實例方法,而不是一個靜態方法),你需要Form1的一個實例,您聲明並初始化Form1的另一個實例
最后,您打開了兩個類Form1的實例,並且該調用由Form1的第二個實例解決,而不是從最初調用_TestMethod的實例中解決。
為避免此問題,您需要將引用傳遞給調用Test_Method的Form1實例,並在Test中使用該實例來回調公共方法。
因此,當調用Test_Method時,傳遞Form1的當前實例
public Form1()
{
InitializeComponent();
_Test._TestMethod(this);
}
並在Test.cs中
class Test
{
Form1 _frm = null;
public void _TestMethod(Form1 f)
{
_frm = f;
_frm._MainPublicMethod("Test Message", "Test Text");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.