表單Form.Load,Form.Shown和Form.Activated事件之間有什麼區別?他們被解僱的順序是什麼?Windows窗體中事件'Form.Load','Form.Shown'和'Form.Activated'的順序
回答
而且,Form.Activate
事件可以被多次觸發。例如,如果您從窗體中打開消息框,並且當您單擊該消息框的任何按鈕並返回到窗體,則會觸發Form.Activate
。其他任何對話框也是如此,例如FileOpenDialog
。
另外:實際上沒有在.net中測試過它,以確定它的行爲是否相同,但是我知道在vb6中,如果您一次一行地遍歷代碼,它會觸發表單加載事件,但不會激活事件,當你不明白爲什麼時這會引起誤解。 – 2012-02-26 21:17:57
Activated事件是否創建表單的新實例? – 2016-01-07 15:38:42
見Windows Forms Events Lifecycle:
- 移動:當表單被移動時發生此事件。雖然默認情況下,當表單被實例化並啓動時,用戶不會移動它,但是在Load事件發生之前觸發此事件。
- 加載:此事件發生在首次顯示錶單之前。
- VisibleChanged:Visible屬性值更改時發生此事件。
- 已激活:當代碼或用戶激活表單時發生此事件。
- 顯示:只要首先顯示錶單,就會發生此事件。
- Paint:控件重繪時發生此事件。
- 取消激活:當表單失去焦點並且不是活動表單時發生此事件。
- 關閉:表單關閉時發生此事件。
- 閉合:當表單正在關閉時發生此事件。
下面是[Windows窗體中的事件順序]的MSDN鏈接(http://msdn.microsoft.com/zh-cn/library/86faxx0d.aspx)。 – Jeremy 2012-04-10 00:21:49
Activated事件是否創建表單的新實例? – 2016-01-07 15:37:47
當表單已被初始化,其手柄已被創建之後,但在上映之前的
Load
事件觸發。在第一時間之後的
Shown
事件觸發的形式變得可見,當你調用form.Show()
(或form.Visible = true
)。
如果你隱藏你的表格,然後再次顯示,Shown
將再次觸發。 (但Load
不會)當用戶切換到您的表單時,會觸發
Activate
事件。
如果用戶切換到不同的程序(或表格),然後切換回您的表格,Activate
將再次觸發。
這並不準確,只顯示一次。 – 2010-06-18 15:17:35
@Hans:錯了。我只是試了一下。如果您兩次調用ShowDialog,則顯示兩次。 – SLaks 2010-06-18 16:36:20
嗯,不知道你在做什麼。加載兩次。不處理對話通常是一個錯誤。 – 2010-06-18 16:57:04
Form和Control類公開與應用程序啓動和關閉相關的一組事件。
Control.HandleCreated
Control.BindingContextChanged
Form.Load
Control.VisibleChanged
Form.Activated
Form.Shown
在應用程序關閉,主窗體的關閉事件按以下順序升高:
當Windows窗體應用程序啓動時,主要形式的啓動事件按照下面的順序提出Form.Closing
Form.FormClosing
Form.Closed
Form.FormClosed
Form.Deactivate
對焦和驗證活動
當你使用鍵盤更改焦點(TAB,SHIFT + TAB,等等),通過調用選擇或SelectNextControl方法,或通過ActiveControl屬性設置爲當前形式,焦點事件ntrol類發生以下順序:
Enter
GotFocus
Leave
Validating
Validated
LostFocus
當通過使用鼠標或通過調用Focus方法改變聚焦,聚焦控制類的事件發生在下列順序:
Enter
GotFocus
LostFocus
Leave
Validating
Validated
- 1. 事件form.shown工作,但form.load不
- 2. C#中的事件和Windows窗體#
- 3. .NET Windows窗體事件觸發的順序是什麼?
- 4. 誰在Windows窗體程序中調用窗體加載事件?
- 5. Windows窗體:用戶控件和事件
- 6. Windows窗體的CompositionTarget.Rendering事件?
- 7. .NET Windows窗體事件序列
- 8. 取消Windows窗體事件
- 9. Windows窗體焦點事件
- 10. DocumentCompleted事件(Windows窗體C#)
- 11. Windows窗體事件消失
- 12. Windows窗體事件日誌
- 13. Powershell Windows窗體onClick事件
- 14. 如何在VB窗體中模擬點擊事件Windows窗體
- 15. 窗體在Windows窗體中移動事件
- 16. Windows窗體的按鍵事件
- 17. .NET Windows窗體 - DateTimePicker上的Click事件
- 18. C#Windows窗體的FormClosing事件
- 19. 取消選中事件ListView Windows窗體應用程序
- 20. 在Windows窗體應用程序中捕獲組合鍵事件
- 21. asp.net WebControl的事件順序和ViewState中
- 22. 插件中的Windows窗體
- 23. C#窗體中的自定義控件Windows窗體鼠標事件問題
- 24. Windows窗體:isLoading vs事件斷開
- 25. C# - 在Windows窗體keydown事件問題
- 26. Windows窗體等效於WPF OnStartup事件
- 27. Windows窗體在C#取消事件
- 28. Windows窗體,WPF鼠標點擊事件
- 29. Windows窗體事件訂閱c#
- 30. .NET Windows窗體 - 攔截Close X事件
NEVER ,永遠,永遠在WINFORMS事件的順序!事實上,如果可能的話儘可能少使用事件,並且如果/當你使用很多事件時,他們應該只調用一些執行大部分工作的常見子事件。誠然,事件的順序不會改變,但是這種編程風格正在尋求錯誤(從我自己的角度講,而不幸的是主要是其他人的經驗)。並且不要在StackOverflow註釋中喊出來! – FastAl 2010-06-18 14:32:12
@Anthony:MessageBox是一個很好的方法來搞亂事件順序。在Load事件結束之前,它將使Shown事件運行*。從不用MessageBox調試UI事件,Debug.WriteLine()是最好的。 – 2010-06-18 15:14:38
我使用了Debug.WriteLine--感謝Hans :)在Load,Shown和Activated事件中。輸出窗口將事件序列顯示爲「加載」,「激活」和「最終顯示」。 – Ananth 2010-06-21 11:41:56