国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

關于Visual Basic 2005窗體互訪技術的思索

2024-07-21 02:20:54
字體:
來源:轉載
供稿:網友
每一天,都有vb6的程序員開始轉入.net開發,而他們面臨的最首要的問題,便是要習慣.net里那些面向對象的金科玉律。因此,論壇上總會重復地聽到網友們討論如何在visual basic .net 2003中進行窗體之間的互相訪問的問題。早些時候,我特地發表了一篇關于此問題解決方案的文章,通過重寫sub new,利用me關鍵字在新窗體中獲得另一個窗體的實例。現在vb2005的時代馬上要到來了,會不會有更簡單的方法呢?答案是肯定的,所有的奧秘都藏在了my.forms命名空間里!

其實這里本沒有什么值得大書特書的地方,維護任何一個窗體類的默認實例,在vb的早期版本就提供了這項功能了。在.net 2003,vb為了追求和其他面向對象語言風格上的一致,就忍痛把這個特性割掉。而vb2005在革新的同時,微軟似乎從更理性的角度去看待那些vb6里被刪去的特性(存在即是有理,不是嗎?),維護窗體默認類便是被重新拾回的一項技術。只不過,現在所有窗體的默認實例都被統一在了my.forms命名空間下(例如my.forms.form2),改變了vb6里混亂之治的風格(oops,涕淌魔獸玩得走火入魔了呵呵)。但是盡管如此,你在寫代碼時,仍然可以省略前面的my.forms,比如你可以在form2.vb里這樣寫:
private sub button1_click(byval sender as system.object, byval e as system.eventargs) _
handles button1.click
form1.text = "hello my.forms"
end sub

哈哈,是不是又找到了vb6的感覺了?

其實我剛接觸到2005里的這個特性時,我還頗有些不適應呢。由于習慣了在2003下開發,我總是自己去new一個窗體。于是我曾經突發奇想想,如果每次啟動程序,是不是my.forms都為我們自動生成一個默認的窗體實例,如果我們用不到這個實例,豈不是很浪費內存?其實不是這樣的,我覺得有必要在這里說以下。

visual basic在執行你的代碼時,當遇到了對my.forms下某一個實例的引用,say,form2,那么,它做的第一件事是先判斷form2窗體的默認實例(注意,是默認實例而不是你自己new出來的實例)是否已被創建。如果是的話,就引用這個實例;否的話,就創建一個默認實例。也就是說,如果你的代碼里根本沒有出現my.forms.form2的話,form2的默認實例就根本不會被創建!所以說,my.forms命名空間只是自動維護窗體的默認實例,而不是自動創建。同樣地,my.forms一般情況下也不負責默認實例的自動回收。

我在上面一直在強調“默認”二字,是因為我想讓你記住,默認畢竟只是默認,它還是有一點點局限性:比如你不得不自己new一個窗體實例時,它就不會被包含在my.forms空間下。所以我想說,如果你的程序里某一個窗體需要被創建很多實例的話,掌握一下vb2003里的窗體互訪技術還是有些必要的。我從前的那篇文章寫得有點趕,沒有把代碼的細節寫出來,所以有些網友向我抱怨。趁著這個機會我細致地講解一下:

我還是假設你的主窗體類名為form1,新窗體類名為form2,那么你現在先重寫一下form2的sub new,使它能夠接受主窗體的實例。你恐怕已經發現你找不到原來的那個sub new了吧?沒錯,vb 2005 beta向程序員隱藏了windows自動生成窗體的代碼。你是不是想起了vb6呀?哦,你和我產生同樣的錯覺了呵呵。其實這些代碼并沒有隱藏,只是被分離到form2.designer.vb文件下了(不信,你去打開看看)。其實這是vb2005里的一個新得令人稱奇的特性,稱之為partial types或是部分類型。限于篇幅,關于部分類型的介紹,此處從略。

先在form2.vb中定義一個form1類型的全局變量:
dim frmmain as form1

然后再重寫sub new,使frmmain指向傳入的form1實例:
sub new(byval frm as form1)
mybase.new()
initializecomponent()
frmmain = frm
end sub

回到form1.vb,我們這樣創建一個form2的實例:
dim frmnew as new form2(me)

現在,你就可以在form2.vb中隨心所欲地調用主窗體實例了。

提到了sub new,你也可以直接在form2.designer.vb里重寫,不過既然微軟把這些代碼分離出來,一方面就是為了避免它們遭到污染,所以除非你是老鳥,否則我不建議你這樣做。

篇末,讓我們再回到visual basic 2005的my關鍵字。my向我們展示了她朝氣蓬勃的一面,但你仔細看看,居然還能找出些返璞歸真的味道來呢,比如說窗體的互訪,就是如此。總之,my是vb2005里一個值得大書特書的新特性。如果你現在想了解my關鍵字更多的內容,你可以先參考我的關于my的一篇很簡單的譯文,然后自己在智能感知下試一試。如果你想更詳細地了解my,包括上面提到的部分類型,就到我師兄ninputer的blog裝配中的腦袋里去找吧(那幾篇文章是我迄今見到的最詳細的)。我想,你每了解my的一項新功能,你一定會發出一聲感嘆:“oh, my god!”
  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 邮箱| 申扎县| 贺州市| 漠河县| 灌云县| 甘孜县| 井陉县| 蓬溪县| 繁昌县| 泸州市| 泽州县| 五大连池市| 廊坊市| 青河县| 阜宁县| 浮山县| 景谷| 喜德县| 茶陵县| 莱芜市| 北京市| 岱山县| 晴隆县| 镇赉县| 庄浪县| 廊坊市| 吉林省| 淮滨县| 台中县| 武邑县| 周口市| 辽宁省| 营口市| 拜城县| 广安市| 云和县| 辽中县| 林州市| 浑源县| 商南县| 都兰县|