0

子フォームから親フォームに情報を渡そうとしています。フォーラムで見つけた次のコードを使用して支援しています。

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace childform
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 tempDialog = new Form2(this);
        tempDialog.ShowDialog();
    }

    public void msgme()
    {
        MessageBox.Show("Parent Function Called");
    }

}
}

Form2.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace childform
{
public partial class Form2 : Form
{
    private Form1 m_parent;

    public Form2(Form1 frm1)
    {
        InitializeComponent();
        m_parent = frm1;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        m_parent.msgme();
    }
}
}

これは機能し、すべてうまくいきます。問題は、私のプログラムでは、フォーム 1 から、button1_Click 以外のメソッドで tempDialog 内に変数を設定する必要があることです。しかし、これらは tempDialog のインスタンスを見つけることができません。これは、button1_click にあるためです。

また、「this」修飾子が Form1 を参照していないため、メソッドから (たとえば、クラスに) 移動することはできません...

Form2 から Form1 を参照する方法とその逆の方法はありますか? このコードを使用していますか?

ありがとう

4

3 に答える 3

0

Form オブジェクトの MdiParent および Parent プロパティについて調査してみてください。これらにより、親を取得および設定し、必要に応じてそれらのメソッドにアクセスできます。

詳細については、MSDN のParent プロパティMdiParent プロパティを参照してください。

お役に立てれば。

于 2013-05-20T00:02:38.433 に答える
0

アプリケーションによっては、アプリで表示および非表示にするフォームのコピーが 1 つしかない場合は、シングルトンの静的参照を作成できる場合があります。ただし、これはフォームを 1 回だけインスタンス化し、show()/hide()を使用して必要に応じて非表示または再表示する場合にのみ機能します。

public partial class Form2 : Form
{
    public static Form2 Instance;

    public Form2()
    {
        InitializeComponent();
        this.Instance = this;
    }
}

次のコードを使用して、どこからでもフォーム 2 にアクセスできます。

Form2.Instance.xxx
于 2013-05-20T00:05:42.650 に答える
0

についての最後のコメントが何を意味するのかわかりませんthis。参照するフィールドを作成Form2し、コンストラクターで初期化します。_form2その後、 の他のメソッドで参照できますForm1

public partial class Form1 : Form
{
    private Form2 _form2;
    public Form1()
    {
        InitializeComponent();
        _form2 = new Form2(this);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        _form2.ShowDialog();
    }

}

複雑さが増すと、この種のことを理解するのが難しくなる可能性があります。より良い方法は、両方が操作できる共通のオブジェクトを作成Form1して参照することです。Form2

于 2013-05-19T23:53:30.833 に答える