我有窗口「Child 1」,它從「Parent」打開。一旦我點擊菜單打開「兒童1」,如果我在菜單中點擊幾次,它可以打開幾個窗口。如何驗證窗口「兒童1」是否打開,然後我們應該提出來。如何在winform窗口中打開,但是如果此窗口已打開,請將其提起
,我用它來打開的窗口中的代碼:
var ticketTypesForm = new fTicketTypes();
ticketTypesForm.Show();
我有窗口「Child 1」,它從「Parent」打開。一旦我點擊菜單打開「兒童1」,如果我在菜單中點擊幾次,它可以打開幾個窗口。如何驗證窗口「兒童1」是否打開,然後我們應該提出來。如何在winform窗口中打開,但是如果此窗口已打開,請將其提起
,我用它來打開的窗口中的代碼:
var ticketTypesForm = new fTicketTypes();
ticketTypesForm.Show();
調用Application.OpenForms
會給你的所有打開的窗體的集合。您可以瀏覽每個打開的表單以檢查是否已經創建了子表單1。如果只是打電話給.Focus()
的方法來提前。如果尚未創建,請按照原樣創建表單。
剛剛從你的類保持一個參考,而不是建立一個每次。
但是如何第一個計劃帶來的窗口(使其活躍?) – Sergey 2013-04-28 16:27:42
只需調用.Focus(); – 2013-05-02 21:33:56
不要使用無功,而不是你能做到這一點
fTicketTypes ticketTypeForm;
//Some code goes here.
if(ticketTypeForm == null)
ticketTypeForm = new fTicketTypes();
ticketTypeForm.Show();
確保ticketTypeForm在事件處理程序代碼中可見,如果您想在某些事件上執行窗體打開。 – 2013-04-28 16:32:15
之前再出現了新的形式,檢查其已打開或不使用:
Application.OpenForms.OfType<YOUR_FORM_TYPE>().Any())
,如果它打開,忽略他的命令,但如果不再次打開它,你可以做到以下幾點:
ticketTypesForm myTicketTypesForm;
private void OpenDialog(object sender, EventArgs e)
{
if (!Application.OpenForms.OfType<ticketTypesForm>().Any())
{
if (myTicketTypesForm == null)
myTicketTypesForm = new ticketTypesForm();
myTicketTypesForm.Show();
}
else
{
myTicketTypesForm.Focus();
}
}
如果它是確定你的應用程序使用的模態模式的子窗口(你不需要與父窗口的用戶交互),那麼只使用一個孩子莫代爾。窗口總是在最上面。
var ticketTypesForm = new fTicketTypes(); ticketTypesForm.ShowDialog(this);
此外,當用戶關閉窗口時,您的應用程序還可以通過方法Hide()關閉子窗口。所以對話將永遠不會被處置。但在這種情況下,你必須使用ticketTypesForm(不是在創建新的每一個窗口打開時)
初始化應用程序或第一顯示
var ticketTypesForm = new fTicketTypes();
顯示
ticketTypesForm.Show(this);
的同一個實例
close
ticketTypesForm.Hide();
這[這個答案](http://stackoverflow.com/a/3751748/17034)爲這樣做的麻煩。 – 2013-04-28 17:08:57
感謝您的鏈接!不知道Application.OpenForms存在固有的問題。感謝您指出正確的方向。 :) – 2013-04-28 17:11:23