2012-03-05 10 views
0

おはようございます。私は質問がある、私はwpfを使用しており、私はフォーム2からform1を閉じる正しい方法を見つけることができません。他のフォームからWpfフォームを閉じる

WpfForm form1 = new WpfForm(); 
form1.close(); 

私は助けが必要です。

+2

?フォームをタイトカップルしたくない場合(いいアイデアではない)、ある種のメッセージパッシングが必要かもしれませんが、それらのものは構築しているシステムに依存しています。あなたは本当にしたいです。 – Carsten

+2

WPFは[ウィンドウクラス](http://msdn.microsoft.com/en-us/library/system.windows.window.aspx)を使用し、[閉じる](http://msdn.microsoft.com /en-us/library/system.windows.window.close.aspx)メソッドで、 'WpfForm'がウィンドウから派生していることを示していますか?あなたはどんな問題に直面していますか? – gideon

答えて

1

あなたの最初のフォームへの参照が必要です。次に、その参照を使用してcloseを呼び出すことができます。

これを処理する方法はいくつかあります。 2番目のフォームにプロパティを追加して、最初のフォームへの参照を保持することができます。 2番目のフォームを作成すると、そのプロパティが設定され、2番目のフォームのイベントが最初のフォームを閉じる(たとえばボタンをクリックする)ようになったら、その参照を使用してフォームを閉じることができます。

2

Mattは、あなたの最初のフォームを2番目のフォームで記述する必要があると述べています。そのリファレンスを持つと仮定すると、以下のようなイベントハンドラを最初のフォームの2番目のフォームへの参照がインスタンスに設定されている場合、Window_Loadedイベントのようなものが良い候補になります。

secondWindow.Closing += (s, e) => this.Close(); 

上記は、あなたではなくあなたのような何かを行うことができ、より詳細なコードを持っているだろう場合は、インラインイベントハンドラである:包みなさいあなたが興味を持っている

secondWindow.Closing += CloseMe; 

private void CloseMe(Object sender, EventArgs e) 
{ 
    this.Close(); 
} 

、氏スキートはインラインイベントハンドラについて説明します別の質問の警告:here

+0

+1はイベントベースのアプローチであるため –

1

としては、マットとポーリーはあなたが静的アクセス修飾子と委譲し、ここのようなを使用することができます参照することなく、これを行うたいと思いますので、もしあなたが、あなたの最初の形式での参照を持っている必要があると述べ、

public delegate void Method(); 
    private static Method close; 

    public Form1() 
    { 
     InitializeComponent(); 
     close = new Method(Close); 
    } 

    public static void CloseForm() 
    { 
     close.Invoke(); 
    } 

次の2番目の形式であなたが書い参照せずに最初の1を閉じることができ、単にこの:あなたはすでに試してみました何

Form1.CloseForm(); 
関連する問題