我有一個關于using陳述句與模態和非模態表單的問題。 我想實作的是當我使用using陳述句時的相同行為。 下面是一個在模態表單中完美作業的例子。
Dictionary<string, string> input。
使用(var window = new Form1()
{
window.ShowDialog()。
if (window.DialogResult == DialogResult.Cancel)
{
return Result.Cancelled。
}
input = window.GetInformation()。
}
當我把ShowDialog()改為Show()時,整個表單就不再作業了。 我試過不使用using陳述句,但這樣我就不能像上面那樣從我的資訊中獲取資訊。 有什么方法可以獲得完全相同的結果,但要用 form.Show() 而不是 ShowDialog()來存檔嗎?
編輯: 當我用 ShowDialog() 顯示來自外部應用程式的表單時,當外部應用程式被點擊時,它并沒有被停用。但我使用的是OnDeactivated事件,在這種情況下并沒有觸發。所以我試著用Show(),這似乎可以作業。
uj5u.com熱心網友回復:
如果問題是為什么Show()在Using陳述句中不起作用,那是因為Show()是非模式的,所以程式流繼續進行(即不像ShowDialog()那樣等待Form關閉)。 所以程式流繼續退出Using,這就處理了在Using中創建的物件,包括你創建的Form。 這就是為什么它看起來不起作用的原因。
下面是我為解決這一問題所做的作業。
我將我想顯示的表單宣告為全域的,即你所使用的類:
我將我想顯示的表單宣告為全域的。
private Form1 window;
在我想顯示的函式中:
if (window != null && !window.IsDisposed) window.BringToFront() 。
else[/span
{
var window = new Form1();
window.Show()。
//...其余的代碼在這里。
}
當然,如果你不使用ShowDialog(),你必須以不同的方式來捕獲結果。 我喜歡的方式是使用FormClosing事件
在你實體化表單的時候添加這個: window.FormClosing = window_FormClosing。
然后在事件處理程式中添加你想要的任何代碼來捕獲結果:
private void window_FormClosing(object sender, FormClosingEventArgs e)。
{
Form1 window = sender as Form1;
//你的代碼在這里。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/308879.html
標籤:
上一篇:GCPreCAPTCHA企業密鑰在開發中作業,但在測驗或開發中不作業
下一篇:SQL新手學習
