2

我的主要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");
    }
}

当我调试我的项目时,代码不起作用。

先感谢您。

4

3 回答 3

2

可以修改这段代码,加括号()

Form1 _Form1 = new Form1();
于 2013-03-22T13:11:12.630 回答
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");
   }
}
于 2013-03-22T13:19:27.680 回答
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");
    }
}
于 2013-03-22T13:18:12.763 回答