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 の 2 つのインスタンスが開かれ、最初に _TestMethod を呼び出したインスタンスからではなく、Form1 の 2 番目のインスタンスによって呼び出しが解決されます。

この問題を回避するには、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 に答える