3

したがって、2 つのフォームがあり、あるフォームから別のフォームにプロパティを渡す必要があります。

Form 1にはメソッドがあります

 private void rb_CheckedChanged(object sender, EventArgs e)
    {
        var frm2= new Form2();
        WorkComplete += frmSetNewTime.btnOk_Click;
        frmSetNewTime.Show();
    }

    private void WorkComplete(object sender, EventArgs e)
    {
     //   Property = Property from form 2
    }

Form2 には btnOK_Click というメソッドがあります

public void btnOk_Click(object sender, EventArgs e)
    {
        Property = 5
     }

私の目標は、フォーム 2 からフォーム 1 にプロパティを渡すことです。

WorkComplete はメソッド グループであるため、サブスクライブできません。エラーが発生します。これを行うための適切な方法、または適切な構文を知っている人はいますか?

4

2 に答える 2

2

1) 2 つのフォームで新しいプロジェクトを作成します。

2) Form2 で、ボタンを作成します。

3) ボタンのプロパティで、 Modifiers をInternalに変更します。通常、これはPrivateです。つまり、Form2 のみが button1 とそのプロパティにアクセスできます。これをInternalに変更すると、アセンブリ内のすべてのクラスが button1 にアクセスできるようになります。これをPublicに変更する場合は、プロジェクトで参照するライブラリが button1 にもアクセスできるようにすることもできます。

4) Form1 で、クラス内に次のコードを追加します。

    Form2 frm;

    private void Form1_Load(object sender, EventArgs e)
    {
        // Create and show the form.
        frm = new Form2()
        frm.Show();

        // Assign the event handler for the button to a handler within this class.
        frm.button1.Click += this.Form2_button1_Click;
    }

    // This is the event handler that will run when you click the button on Form2.
    private void Form2_button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("You clicked the button on Form 2!");
        var frmProperty = frm.Property;
    }
于 2014-05-09T19:42:12.847 に答える
1

これを試して:

public event OnWorkCompleted;

public void WorkComplete()
{
   if(OnWorkCompleted != null)
       OnWorkCompleted(Property, null);
}

サブスクライバーフォームで:

Form1.OnWorkCompleted += Form1WorkCompleted;

public void Form1WorkCompleted(object sender, EventArgs e)
{
    var property = (int)sender;
    MessageBox.Show('hey form 1 property is ' + property.);
}

お役に立てれば。

于 2014-05-09T19:32:04.337 に答える