我有一個運行在.NET Framework 4.0上的C#WinForms應用程序。表單隱藏()
當用戶在一段時間內不活動時,我希望它隱藏所有顯示的表格並在通知區域顯示一個圖標。當用戶點擊該圖標時,會出現一個登錄表單,如果憑證有效,它將打開之前打開的確切表單。
爲此,我將對象的List
對象中的開放表單列表存儲起來,並像這樣隱藏它們。該方法由Timer叫:
private void LogOut()
{
foreach (Form form in Application.OpenForms)
if (form.Visible)
{
GlobalVariables.formList.Add(form);
form.Hide();
}
}
當憑證被驗證,我儘量讓形式再次可見,像這樣:
//Show the previous forms.
foreach (Form form in GlobalVariables.formList)
form.Visible = true;
//Clear the forms list.
GlobalVariables.formList.Clear();
如果我只有MainForm的開放時,我躲如果我有其他窗體打開(使用MainForm中的ShowDialog()
打開),程序將崩潰在form.Visible = true;
並給我以下錯誤消息:
ObjectDisposedException was unhandled
Cannot access a disposed object
我該如何解決這個問題?另一種做法,我試圖實現也將是偉大的。
請注意,使用try-catch塊來確定表單是否已被處置並剛剛重新啓動表單不是一個選項,因爲用戶可能在隱藏表單中有未保存的輸入。
我無法找到超過3小時的搜索在線相關的任何事情,所以任何幫助將不勝感激!
編輯:在嘗試過各種各樣的事情後,我注意到這個問題只發生在我用ShowDialog()
打開窗體的窗體上。如果我只使用Show()
打開表單,一切正常。
但在我的情況下,使用Show()
不是一個選項,因爲我不能讓用戶點擊父窗體中的東西。隱藏父表單不是一種選擇,因爲他需要在父表單中查看信息。
那麼這確實是一個很好的問題。 :) +1 – ispiro
相關:http://stackoverflow.com/a/3751748/939213。 – ispiro
Try form.Show();而不是form.Visible = true; –