从另一个类调用主类的公共方法

时间:2013-03-22 13:09:21

标签: c# winforms

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

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

提前谢谢。

3 个答案:

答案 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");
    }
}