0

スレッド テクノロジを使用してメイン ウィンドウ フォームによって作成された chlid ウィンドウ フォームには、子テキスト ボックス コントロールがあり、この機能を実装したいと考えています。テキストをメイン ウィンドウ フォームに追加します。それについて私は何ができますか?

4

2 に答える 2

0

簡単にグーグルで検索すると、大量の結果が返されます...

おそらく、Form2 (子) を作成するときに、Form1 (親) のインスタンスを渡すことができる public メソッドを用意し、次に Form1 で同じことを行いますが、インスタンスではなく文字列を渡すことをお勧めします。形。したがって、次のような結果になります。

Form1 (親):

private void Button1_Click_ShowChildForm(args..)
{
    Form2 frm2 = new Form2();
    frm2.Show();
    frm2.GetInstance(this);
}

public void PassBack(string var)
{
    TextBox1.Text = var;
}

Form2 (子):

private static Form1 _frm1;

public void GetInstance(Form1 Frm1)
{
    this._frm1 = Frm1;
}

private void Button2_Click_Close(args...)
{
   _frm1.PassBack(this.TextBox2.Text);
   this.Close();
}

そのような何か^^^^トリックを行う必要があります。;)

注意。少し整理することもできますが、本当にやりたい場合は、Form2 の Show メソッドをオーバーライドして、別のメソッドを宣言する代わりに Form1 のインスタンスを受け入れることができますが、アイデアは得られます。

于 2012-05-26T14:02:00.620 に答える
0

ChildWindowがメッセージをMainWindowに送り返す方法が必要です。次の例が役立つはずです。

コード:

ウィンドウ間の「通信」を可能にするインターフェース
public interface IListner
{
    void Send(String message);
}
メインウィンドウ
public partial class MainWindow : Window, IListner
{
    public MainWindow()
    {
        InitializeComponent();
    }

    public void Send(string message)
    {
        // Read the message here.
        // If this code is called from different thread, use "Dispatcher.Invoke()"
    }

    public void OpenAnotherWindow()
    {
        // Since "MainWindow" implements "IListner", it can pass it's own instance to "ChildWindow"
        ChildWindow childWindow = new ChildWindow(this);
    }  
}
子ウィンドウ:
public partial class ChildWindow : Window
{
    private IListner Listner { get; set; }

    public ChildWindow(IListner listner)
    {
        InitializeComponent();

        Listner = listner;
    }

    private void OnTextBoxTextChanged()
    {
        // This will call "Send" on "MainWindow"
        Listner.Send(TextBox1.Text);
    }
}
于 2012-05-26T15:40:50.693 に答える