談Form Load 與OnLoad 的區別

2021-08-25 20:00:35 字數 1945 閱讀 4503

檢視別人源**的時候發現了一段不太熟悉的**,如下:

protected overrides sub onload(byval e as system.eventargs) mybase.onload(e) dim f as new frmwelcome f.mdiparent = me f.show() fader.form = me fader.fadein() end sub

自己用常用**改寫後發現執行起來無區別:

private sub democenter_load(byval sender as object, byval e as system.eventargs) handles me.load dim f as new frmwelcome f.mdiparent = me f.show() fader.form = me fader.fadein() end sub

由此引發了思考:form_load()與onload()有什麼區別?

經過一番查詢,得到答案如下:

ms在製作form類的時候,定義了public event load(sender as object, e as eventargs)這樣乙個公共事件。如果要傳送這個事件,必須raiseevent load(me, new eventargs())。那麼這個語句寫在那裡呢,就寫在了onload函式裡面。而這個onload函式自然是從window訊息處罰產生的。所以乙個完整的時間傳送順序是

windows message [load] -> onload -> form1_load

那麼onload和form1_load的區別是什麼呢?

1)onload是overridable的,也就是說我們如果希望這個form不要進行load的操作(包括.net自己關於load的操作),那麼我們就可過載這個onload函式,但是不執行mybase.onload(me, e)。這樣我們就完全遮蔽了load這個事件。

2)onload只能再派生類裡面起作用,但是form1_load是在外部也可以起作用的。

上面的說法我還不是特別理解,不過對於時間發生順序感覺講解的還是比較清楚的,另外

根據關鍵字overrides可見,第一段**重寫了基類base class的方法,也就是說,onload事件執行在前,form_load()是由onload所引發的。(僅個人觀點,如有錯誤希望指正!)

根據上文的區別1),下面進行**試驗:

新建乙個窗體,輸入**

private sub form1_load(byval sender as object, byval e as system.eventargs) handles mybase.load messagebox.show("form1_load") end sub protected overrides sub onload(byval e as system.eventargs) messagebox.show("onload") end sub

執**況是:

僅僅彈出了onload訊息框,說明已經遮蔽load事件!

改寫**如下:

private sub form1_load(byval sender as object, byval e as system.eventargs) handles mybase.load messagebox.show("form1_load") end sub protected overrides sub onload(byval e as system.eventargs) mybase.onload(e) messagebox.show("onload") end sub

即,增加行mybase.onload(e),此時彈出2個訊息框,即2個事件均成功啟用。

這點驗證了上文的區別1),對此看看搜到的另一位的說法:

基類中的onload函式會引發事件呼叫form1_load。如果重新寫了onload函式,那麼基類中引發事件的**就不會被執行。

至此,大致明白了兩者的區別,對於新手,我認為用form_load()已經可以滿足要求了。

微信小程式之onLaunch與onload非同步問題

非同步有好處,也有不好的地方,小程式開發,如果從網路調取資料,而且,這個資料在幾處用到,那麼,很有可能存在本文所說的問題。回到頂部 回到頂部 回到頂部 onlaunch function 定義全域性變數 globaldata 使用者登入請求封裝 解決onlaunch和onload執行順序問題 use...

談與同學關係

快畢業了,想著沒幾天就要離開那些人覺得挺傷感的!昨天晚上躺在床上開始想,究竟怎樣的同學關係才算好了?大一結束以後,從化工學院轉系到自動化系。可以說認識的同學多了乙個班。就說說自己與這兩個班的同學之間的關係,以及其形成的相關因數。比較 1 星期天去了一趟市內化工學院,一進我以前寢室的幾個同學現在的寢室...

如何與老闆談加薪

工作時間不短了,自己感覺業績也不少了,可是老闆似乎總也視而不見,發到手的薪水還只是那麼點兒。於是乎,總有些憤憤不平的,心裡難免就打起了小九九,覺得老闆太摳,覺得自己遭遇太不公。這時候,就該跟老闆談談加薪的事情啦。如果不談,也許就該考慮是不是該跳槽啦。其實跳槽並不是我們真正想要,畢竟誰也不願意輕易離開...