2016-05-14 28 views
3

私は今、学校プロジェクトに取り組んでいます。主な仕事は、WinFormsで簡単なTic-Tac-Toeアプリケーションを作成することです。バックグラウンドでウィンドウを閉じる

あなたがゲームに勝った場合、「Player XY」が勝ったという小さなアニメーションがポップアップします。通常、ユーザーはウィンドウをクリックするだけですが、プレーヤーを開いて「新しいゲーム」をクリックした後でも、閉じることができます。

私の問題がどこにあるのですか?ウィンドウをクリックして別のウィンドウで「新規ゲーム」をクリックしていない場合、現在開いているアニメーションはゲームフィールドの後ろに閉じません。

これは、「新しいゲーム」ボタンのコードの一部は次のとおりです。

private void New_Game_Click(object sender, EventArgs e) 
{ 
    Winscreen winscreenClose = new Winscreen(); 
    winscreenClose.CloseWinscreen(); 
} 

これはWinscreen内のコードです:だから

public void CloseWinscreen() 
{ 
    this.Hide(); 
} 

関数が呼び出されますが、それはしていません窓を閉めて。また、関数が正しく呼び出されることを確認するために、this.Close();Environment.Exit(0);を試してみました。

+4

新しいインスタンスを作成してすぐに閉じます。既存のウィンスクリーンを閉じるには、作成したインスタンスオブジェクトを使用して表示する必要があります。 – Plutonix

答えて

2

あなたはあなたのメインフォームのフィールド必要があります:あなたは、ユーザーにウィンドウを提示している場合は、この変数にインスタンスを割り当て、

private Winscreen winscreen = null; 

を:

this.winscreen = new Winscreen(); 
this.winscreen.Show(); // or whatever you're doing currently 

この方法で、あなたがいます参照を実際に画面に表示されるウィンドウに保存することができます。現在のソリューションでは、毎回新しいインスタンスを作成しています。それぞれのインスタンスは、以前に開いたウィンドウとは関係ありません。その後

ポップアップを閉じることができ、新たなゲームを開始:Steveは、以下のコメント欄で指摘しているように、ユーザが自分自身でウィンドウを閉じますとき

private void New_Game_Click(object sender, EventArgs e) 
{ 
    if (this.winscreen != null) 
    { 
     this.winscreen.CloseWinscreen(); 
     this.winscreen = null; 
    } 

// ... 
} 

して、あなたはまた、ケースを処理する必要があります。これは、イベントハンドラを使用すると簡単です。読者のための練習として残しておきます;

+3

新しいゲームボタンをクリックするのではなく、ユーザーがフォームを正しく閉じた場合に、Winscreenフォームのclosingイベントのイベントハンドラも提供する必要があります。悪は細部にある.... – Steve

関連する問題