2011-01-12 14 views
1

私はステータスボタンを持つウィンドウフォームアプリケーション(ゲーム)を持っています。 ユーザーが統計ボタンを押すと、彼の統計を見ることができる新しいウィンドウが開きます。1つのウィンドウが閉じている間にいくつかのウィンドウを閉じる

問題:ユーザーが[統計]ボタンをクリックし、統計ウィンドウがポップアップします。オプションボタンを押してゲームのオプションを変更すると、ゲームフォームを閉じるコードがありますが、統計フォームはありません。だから、彼が統計フォームを閉じるのを忘れても、それは開いたままです。

ゲームフォームから統計フォームを閉じるにはどうすればよいですか?

答えて

3

フォームの所有者をForm.Ownerプロパティで指定します。あなたのケースでは、これは、メインウィンドウか、または新しいウィンドウを起動するためにユーザーによって起動されたGUI要素を持っていたウィンドウのいずれかです。所有者が閉じていると、新しいフォームが閉じられます。この関係は連鎖しているので、フォームBの所有者をフォームA、フォームCのオーナーをB、フォームAのオーナーをB、フォームAのオーナーをBにするとCが閉じます(Aを閉じるとBも閉じます)。 BがCを生成し、CがBとは独立していれば、Cの所有者をA(これはフォームBのOwnerプロパティで行うことができます)に設定し、Bを閉じてもCは開いたままですが、Aを閉じるとCは閉じます。

最後に、Application.Run(フォームmainForm)を使用して "メイン"プログラムフォームを開くと、パラメータとして指定されたウィンドウが閉じられると、アプリケーションは完全に終了します。したがって、実行可能ファイルがAを生成し、AがBを生成し、BがCを生成する場合、Aがクローズされると、所有権に関係なく、アプリケーションが閉じられ、すべてのウィンドウが閉じられます。

+0

優秀!ありがとう –

-1

なぜをShowDialog()として開くだけで、オプションフォームに戻る前に閉じてください。
とゲームのフォームがメインフォームが続いている場合には、自動的に他の残りのフォームを閉じる必要があり、そうでなければ、あなたのゲームのフォーム内のどこかにsatasFormを宣言し、ユーザーがゲームのフォームを閉じたときに今までそれを閉じるために管理する必要が

StatsForm sFrm = new StatsForm (); 
public gameFrm() 
{ 
InitializeComponent(); 
} 

private void btnShowStateForm_Click(object sender, EventArgs e) 
{ 
sFrm.Show(); //or call 
// sFrm.ShowDialog(); 
} 

private void gameFrm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
sFrm.Close(); 
} 
+0

モーダルダイアログでは、UIに大きな制限があります。統計がリアルタイムゲームでリアルタイムである場合、モーダルダイアログとして統計をポップアップすると、ゲームが一時停止(マルチプレイヤーでは不可能)する必要があります。そうしないと、メインフォームを制御できなくてもポイントやゲームを失う可能性があります。モーダルは、主に実行が停止した場合に使用する必要があります。ユーザーは、理由やユーザーからの質問に応答せずに通常の実行を続行できないことを知る必要があります。統計ウィンドウはこれらのどちらでもありません。 – KeithS

+0

私が知る限り、ゲーム内のすべてのオプションのインターフェイスは、ダイアログやウィンドウの外観として機能します。コードを見れば、それは単に 'show()'が使われていることに気づくでしょう。 –

関連する問題