程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB.NET >> VB.NET之旅(一)—失蹤的窗體

VB.NET之旅(一)—失蹤的窗體

編輯:VB.NET

VB.NET之旅(一)—失蹤的窗體。本站提示廣大學習愛好者:(VB.NET之旅(一)—失蹤的窗體)文章只能為提供參考,不一定能成為您想要的結果。以下是VB.NET之旅(一)—失蹤的窗體正文


很久沒有新作,架不住冤家們的訊問與诘問,只得拿些舊作來補上近日沒空寫 作的缺乏。羞愧ing!這一系列與Henry手記系列不同,是一個角色方式的情形故事 ,最初發表於《計算機世界》,適用於VB.net初學者,老鳥們就不必在我這一系 列的文章上糜費時間了。我希望自己有時間當前,能不時持續這一系列的文章, 參加少量的工程處理方案。同時,我的Henry手記也會持續寫下去,以報答臨時以 來支持我的一切冤家。

背景:我叫Henry,剛從大學計算機專業畢業,新 參加索易公司的.NET開發小組;擔任帶我的喽羅是大李,.NET高手,是個幽默又有 耐煩的家伙;老白是我們部門的頭頭,常常帶給我們乖僻又難纏的需求。

第一天下班,白經理就帶著我去.NET技術小組報到。“大李,這是新來的同 事,你要多幫幫他。”老白指著我對一個眼鏡前面透著閃閃目光的年老人說 。

“沒問題,他會做得很好的。”大李難道會看相不成?還是 人家客氣呀?不論了,我只需自己努力就對了。

20分鐘後,我曾經在分配 給我的一台P4電腦,WindowsXP平台下翻開了Visual Studio.NET的集成編譯環境 (IDE)開端欣賞了。一個多美麗的編譯環境呀,可以自選運用時的作風是VB6的還 是VC6的。我選擇的是RAD功能好的VB6作風。

“你剛開端接觸.NET, 在零碎培訓之前先加深點印象,看看VB.NET與VB6有什麼不同吧。你創立兩個窗體 ,每個窗體上各有一個按鈕,點擊時隱藏其所在的那個窗體,切換出另一個窗體 來。”大李的聲響在耳邊響起,打斷了我對IDE的欣賞。但他提的要求也太 復雜了吧,在VB6中只需求兩句寫在按鈕的單擊呼應中的語句就行了:

兩 個窗體:Form1與Form2。Form1上的按鈕為: Command1,Form2上的按鈕為: Command2

Private Sub Command1_Click()
  Me.Hide
  Form2.Show
End Sub
 Private Sub Command2_Click()
  Me.Hide
  Form1.Show
End Sub

於是,我毫不猶疑地在VS.NET中內開端我的第一個VB.NET的項 目了。首先,新建了一個VB.NET的Windows使用順序項目,自動生成了一個 Windows Form:Form1,在其上參加一個按鈕控件:Button1;然後,添加了一個 Windows Form:Form2,在其上參加了一個按鈕控件:Button2。

在設計窗口 雙擊Button1後,編譯器會切換到代碼窗口的Button1的單擊呼應代碼中。

在代碼段中故計重施,當我想寫Form2.Show時,在Form2之後打個點,呈現的智能 感知菜單中,卻沒有Show這一辦法。真奇異,這怎樣能夠?難道VB.NET改動有這 麼大。我低頭看了看站在我身旁的大李。

大李立即面露淺笑,看來是正中 他的圈套。他手指向屏幕,點了點Form1中的代碼的掃尾處:

Public 

Class Form1
    Inherits System.Windows.Forms.Form

不笨的我立即就明白 了,如今的Form1是一個從System.Windows.Forms.Form承繼上去的類了,調用的 時分當然需求先實例化了,哈,也不難嘛。馬上入手:

Private Sub 

Button1_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles Button1.Click
Me.Hide()
        Dim frm2 As New Form2() ‘實例化Form2類,失掉

一個對象
frm2.Show()
End Sub

在Form2的Button2的單擊事情中也類似地寫了一段代碼,運轉 一下,和VB6的效果差不多了。正在自得中,大李走過去,在我的Form1中添加了 一個文本框textbox1,清空其中的文字。然後運轉了一下順序。在運轉中,他在 文本框裡寫了幾個字:“Henry的作品”,然後點擊Button1切換到 Form2,接著點擊Button2,重新呈現的Form1的文本框中卻變成了空白。

“這……”我一時語塞,漸漸地想終點什麼, “應該是順序經過New結構辦法,每次點擊按鈕都會重新實例化一次Form類 吧?所以每次重新呈現的窗體都不是以前已經呈現過的那個。那以前的窗體也就 失蹤了,調不出來了。”

“失蹤?”大李不由笑了起來 ,“對呀,失蹤在內存中。你每實例化一次,零碎就會開拓一塊內存給一個 對象,並會有相應的線程對其停止控制與管理。假如作為進程中主線程的第一個 Form1被Hide起來,沒有封閉它,那麼即便你封閉後來新創立的一切窗體,進程也 不會被中止。那麼,用什麼辦法去找回你失蹤的窗體,或許說怎樣樣就只運用一 個對象,不再每次實例化呢?”

“全局對象!”我脫口 而出,覺得到大李模稜兩可,只好硬著頭皮持續說:“應用全局變量,使 Form1與Form2只實例化一次,這樣就可以了。”

然後,在大李的注 視下,我開端施行我的方案:

再創立一個模塊文件:module1.vb,並且同 時在:

處理方案管理器-〉項目名.sln -〉右點鼠標 -〉屬性 -〉通用屬 性->慣例->啟動對象 -〉改為Module1。讓順序啟動後先運轉Module1中的 代碼指令,然後編寫代碼如下:

'Module1.vb
Module Module1
    Public frm1 As New Form1()  ‘定義Form1的公用變量實

例
    Public frm2 As New Form2() ‘定義Form1的公用變量實例
    Sub Main()
        Application.Run(frm1) ‘這句話標明順序啟動了

modele後,會接上去運轉frm1,即form1的一個實例。
      主線程就成為運轉期的frm1了。
    End Sub
End Module

這樣一來,frm1、frm2就成為全局變量了,在Button1與 Button2的單擊呼應代碼中只需寫:frm1.show就可以了。

再運轉順序,可 以了,“Henry的作品”不斷都會堅持在Form1中的文本框裡。

大李老哥沒等我歡笑起來就再次出手,在frm1隱藏起來的時分,封閉了Form2窗口 (frm2實例),桌面上什麼窗體都沒有了,進程又一次被墮入在無法中止的狀況 下。My God,面向對象的VB.NET,愛你難道真的這麼難……

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved