簡體   English   中英

從另一個類調用主類的公共方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM