1

2 つ目のウィンドウが閉じていないようです。これが私がやっていることです....

  • 新しい WPF プロジェクトを作成しました。

  • メインウィンドウにボタンを配置しました。

  • 次のコードをボタンに追加して、2 番目のウィンドウを起動し、メインを非表示にします。

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        var projectWindow = new NewProjectInfo();
        this.Hide();
        projectWindow.Show();
    }
    

- 新しいウィンドウは何もない空白のウィンドウです。

-新しいウィンドウの「閉じる」イベントで、メイン ウィンドウを再度表示するコードを追加しました。

    private void Window_Closed(object sender, EventArgs e)
    {
        var mainWindow = new MainWindow();
        mainWindow.Show();
    }
  • プログラムを実行し、2 番目のウィンドウを開かずにメイン ウィンドウを閉じると、プログラムは希望どおりに終了します。

  • メイン ウィンドウのボタンをクリックして 2 番目のウィンドウに移動し、そのウィンドウを閉じてメイン ウィンドウに戻り、メイン ウィンドウを閉じると、プログラムは終了しません。(つまり、ビジュアルスタジオで停止ボタンを押して終了させる必要があります)

2 番目のウィンドウにアクセスすると、何らかのプロセスが実行されたままになるようなものです。

したがって、メイン ウィンドウを閉じると、次のコマンドを実行できます。

 Application.Current.Close();

しかし、それは安全ですか?何かがぶら下がっている可能性がありますか?または、メインを閉じるとプログラムが終了するように、その2番目のウィンドウを閉じるより良い方法はありますか?

4

2 に答える 2

3

これらの行

   var mainWindow = new MainWindow(); 
   mainWindow.Show(); 

新しい MainWindow を作成して表示します。元の MainWindow はまだ非表示になっています。

問題を解決するには、元の MainWindow インスタンスへの参照が必要です。
おそらく、セカンダリ ウィンドウを作成するときにこの参照を渡すことができます。

// Create a NewProjectInfo instance and pass this 
var projectWindow = new NewProjectInfo(this); 
this.Hide(); 
projectWindow.Show(); 

projectWindow のコンストラクターで、渡された参照をグローバル var に保存します。

var MainWindow _originalReference;

public NewProjectInfo(MainWindow original)
{
    _originalReference = original;
}

ウィンドウを閉じるイベントで、参照されたウィンドウを使用できるようになりました

private void Window_Closed(object sender, EventArgs e)   
{   
    _originalReference.Show();   
}   
于 2012-06-17T23:03:34.793 に答える
0

新しいメイン ウィンドウを作成する代わりに、単にApplication.Current.MainWindow.Show();クローズド イベント ハンドラを呼び出すことはできますか?

于 2012-06-17T23:08:55.070 に答える