2011-01-12 270 views
1

我有一個窗體窗體應用程序(一個遊戲),它有一個stats按鈕。 當用戶按下統計按鈕時,會彈出一個新窗口,他可以查看他的統計信息。一個窗口關閉時關閉幾個窗口

問題是:用戶單擊統計按鈕並彈出統計窗口。當他按下選項按鈕來更改遊戲選項時,我有一個關閉遊戲窗體但不顯示統計窗體的代碼。所以如果他忘記關閉統計表格,它仍然是開放的。

如何從遊戲表單中關閉統計表單?

回答

3

使用Form.Owner屬性指定表單的所有者。在你的情況下,這可以是主窗口,也可以是用戶觸發GUI元素以生成新窗口的窗口。如果業主關閉,新表格將關閉。這種關係是級聯的,所以如果您將表格B的所有者設置爲表格A,然後將C的所有者設置爲B,那麼如果您關閉A或B(如果關閉A,B也將關閉),C將關閉。如果B生成C,但C獨立於B,則將C的所有者設置爲A(您可以通過表單B的所有者屬性進行設置),並且C在B關閉時保持打開狀態,但在A關閉時仍然關閉。

最後,如果使用Application.Run(Form mainForm)打開「main」程序窗體,當指定爲參數的窗口關閉時,應用程序將完全退出。因此,如果可執行文件產生A,則A產生B,而B產生C,當A關閉時,不管所有權如何,應用程序關閉並關閉所有窗口。

-1

爲什麼不直接打開它dialog使用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

模態對話框對用戶界面設置了重要限制。如果統計數據是實時遊戲中的實時數據,則彈出統計數據作爲模態對話框必須強制遊戲暫停(在多人遊戲中不可能),否則玩家可能會失去點數或遊戲而無法控制主表單。主要應用於執行已停止並且用戶必須知道原因的情況下,或者在沒有用戶對問題的響應的情況下正常執行無法繼續的情況。統計窗口既不是這些。 – KeithS 2011-01-13 17:56:17

+0

據我所知,遊戲中的所有選項界面都可以用作對話框或全窗口外觀,而這只是一個建議,如果你看看代碼,你可以注意到`Show()`是用來做什麼的 – 2011-01-13 18:47:37