2010-02-07 104 views
15

我有一個Windows窗體,我想從中打開一個狀態窗體,上面寫着「正在保存...」 ,然後在保存完成時消失。我想將這個小小的地位表格放在呼叫表格的中間。我嘗試將「StartPosition」設置爲「CenterParent」,但它的工作。我從其他表單創建狀態表單,如下所示:設置窗體的父項

SavingForm saving = new SavingForm(); 
savingForm.Show(); 
Thread.Sleep(500); //Someone said this is bad practice ... why? 
savingForm.Close(); 

調用表單不是「父」嗎? 當我設置手錶保存它說它沒有父母。

我想:

SavingForm saving = new SavingForm(); 
saving.Parent = this; 
savingForm.Show(); 
Thread.Sleep(500); 
savingForm.Close(); 

,它拋出一個異常「頂級控件不能被添加到一個控制。」

如何在調用窗口中居中顯示此狀態窗口?

在此先感謝

+0

顯示..睡眠..關閉..代碼不保證實際顯示任何東西。在睡眠期間你也是UI線程掛起,所以它可能會引入UI故障。 – CodingBarfield 2012-10-30 09:00:29

回答

14

我會做這樣的事情:

SavingForm saving = new SavingForm(); 
savingForm.ShowDialog(this); 

在SavingForm中,我將在運行500毫秒的加載處理程序中啓動計時器,然後在完成時關閉表單。這樣清潔。 ShowDialog也會鎖定你的用戶界面,只顯示保存表單,而不允許用戶使用任何東西。

+0

似乎沒有一個需要一個所有者的Form?ctor? http://msdn.microsoft.com/en-us/library/system.windows.forms.form.aspx – Blorgbeard 2013-06-19 07:01:05

+0

@Blorgbeard:好眼睛。我把'this'放入錯誤的方法中(寫下來不用IDE /編譯器)。請參閱我的編輯。我的意思是'savingForm.ShowDialog(this);' – 2013-06-19 22:17:30

12

使用此:

saving.Show(this); 

設定擁有者,當你表現形式。

編輯:ShowDialog()方法也有讓我們過載您指定的所有者,如果這是你決定要走的路線:

saving.ShowDialog(this); 
+13

這設置了「所有者」而不是「父母」,這是不同的選項。 – VitalyB 2011-04-28 14:27:24

+0

準確。例如,當您將Form2停靠在Form1中並且您打開Form3時,所有者將是Form1而不是Form2! – LuckyLuke82 2018-01-25 06:44:37