私はちょっとしたゲームに取り組んでいます。 "Game.cs"はウィンスクリーン( "winscreen.cs")を開きます。ウィンスクリーンでは、新しいゲームを作成することができます。 Game.csはMainMenuを介して開かれました。Form1から開いたForm3のForm2を閉じます。
あなたはWinscreenに新ゲームボタンをクリックした場合、それは新しいプレイフィールド開きます:
private void winscreen_again_Click(object sender, EventArgs e)
{
Game loadGame = new Game();
loadGame.Show();
}
を問題は次のようになります。これは、新しいプレイフィールドを開き、古いもの、その一回開かれましたメインメニューは開いたままです。だから私は何もしませんloadGame.Close();
しようとしました。
私も自分のForm1.cs(メインメニュー)でこれを実行しようとしました:
public Game loadGame;
以降、これを呼び出す:
this.loadGame = new Game();
this.loadGame.StartPosition = FormStartPosition.CenterScreen;
this.loadGame.Show();
を私がやったWinscreen.csから[ウィンドウを閉じるにはWinscreenでこの:
Game.loadGame.Close();
とそのdidntのが働いていたので、私は
をしたGame closeGame = new Game();
closeGame.loadGame.Close();
でも、私はpublic Game loadGame;
を "静的"に設定した場合、this.loadGame ... wouldntはもう動作しません。
したがって、私のWinscreen.csを介して既存のGame.csを閉じるにはどうすればよいですか? ありがとう! CheckWinnerメソッド内Game.cs
で
確かに、あなたのGameオブジェクトをwinscreenクラスのメンバ変数にする必要がありますか?それ以外の場合は、クリックするたびに新しいインスタンスが開始されます。しかし、m_loadGame変数がある場合は、すでに表示されているかどうかをテストできます。それらは私の考えです。 –
あなたの 'loadGame'変数は' winscreen_again_Click'ハンドラの中で宣言されました。だからあなたは 'Game.loadGame.Close'を行うことはできません。 'Game m_loadGame'変数を実際の' winscreen'クラス自体に追加する必要があります。 –
メインメニューから古いプレイフィールドをウィンスクリーンのコンストラクタに渡すことができます。この方法では、以前に表示されたウィンドウのインスタンスが作成されます。あなたはまだAndrewが言ったようなクラス変数が必要です。コンストラクタで、 'main.cs'から取得したパラメータを割り当てて、新しいものを開く前に' winschreen_again_Click'ハンドラで閉じることができます –