我的主要 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");
}
}
当我调试我的项目时,代码不起作用。
提前谢谢。
答案 0 :(得分:2)
您可以修改此代码,添加括号()
Form1 _Form1 = new Form1();
答案 1 :(得分:2)
我想你想在所有者表单上调用mainpublicmethod,而不是所有者表单的新实例。 像这样:
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");
}
}
答案 2 :(得分:1)
您的代码显示了一个常见的误解(或者缺乏对基本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");
}
}