用VB.NET做WinForm的應(yīng)用程序 [ English ]2008-2-24 1:52:17 中國(guó)學(xué)網(wǎng) 跟貼 0 條 網(wǎng)友投稿
用VB.NET做WinForm的應(yīng)用程序 馬金虎 在VB.NET程序設(shè)計(jì)中,設(shè)計(jì)Windows的窗體已經(jīng)完全變了樣。在.Net FrameWork中,任一個(gè)Windows窗體都是通過(guò)繼承名稱(chēng)空間中System.Windows.Forms中的一個(gè)叫Form類(lèi)而產(chǎn)生的。用VB.NET做一個(gè)WinForm(Windows Form即Windows 窗體)應(yīng)用程序?qū)τ谟肰B.NET的程序員來(lái)說(shuō)一個(gè)基本的,也是最重要的。應(yīng)用本文就是通過(guò)一些例子,循序漸進(jìn)的介紹用VB.NET做Windows 應(yīng)用程序的基本要點(diǎn)。這些要點(diǎn)就是:創(chuàng)建一個(gè)窗體、為窗體增加組件、編寫(xiě)響應(yīng)事件。在程序中使用了面向?qū)ο蟮姆治龇椒▉?lái)設(shè)計(jì)WinFrom。 一. 程序設(shè)計(jì)及運(yùn)行環(huán)境 (1).視窗2000專(zhuān)業(yè)版本 (2)..Net FrameWork SDK Beta 2 二. 創(chuàng)建第一個(gè)VB.NET的窗體 VB.NET的程序員可以利用.Net FrameWork的基本類(lèi)型庫(kù),非常方便、快捷的創(chuàng)建一個(gè) Windows的應(yīng)用程序。在System.Windows.Forms名稱(chēng)空間中提供了你需要?jiǎng)?chuàng)建一個(gè)Windows Form應(yīng)用程序的所有類(lèi)型。你可以通過(guò)繼承System.Windows.Forms.Form類(lèi),來(lái)建立一個(gè)WindowsForm。下面代碼的作用就是通過(guò)繼承System.Windows.Forms.Form來(lái)建立一個(gè)名字為Form1的類(lèi): Public Class Form1 : Inherits System.Windows.Forms.Form End Class 請(qǐng)注意如果你把Inherits關(guān)鍵字部分放在另外一行,你就不需要在類(lèi)的名字和 Inherits關(guān)鍵字中間加上冒號(hào),具體如下: Public Class Form1 Inherits System.Windows.Forms.Form End Class 在本文中一般定義了二個(gè)Sub,分別為New( ),InitializeComponent()。其中第一 個(gè)是一個(gè)構(gòu)造器,當(dāng)你用NEW關(guān)鍵字繼承了一個(gè)對(duì)象,此Class中的一個(gè)構(gòu)造器就會(huì)被調(diào)用。在此構(gòu)造器中,通常是寫(xiě)一些初始化的代碼。如果你的初始化代碼有很多行,你可以建立一個(gè)PrivateSub來(lái)管理這些代碼,這就是--InitializeComponent()。 下面就是第一個(gè)Form的源程序(form1.vb)和運(yùn)行后的界面: Imports System.Windows.Forms Imports System.ComponentModel Public Class Form1 Inherits System.Windows.Forms.Form Public Sub New ( ) InitializeComponent( ) End Sub Private Sub InitializeComponent( ) Me.Text = "第一個(gè)空的窗體!" Me.Width = 400 Me.Height = 300 End Sub End Class Module Module1 Sub Main ( ) Application.Run ( new Form1 ( ) ) End sub End Module 通過(guò)以下編譯命令就可以得到一個(gè)Windows Form可執(zhí)行文件。 Vbc /t:winexe /r:system.dll /r:system.windows.forms.dll form1.vb 這只是一個(gè)沒(méi)有任何組件的空的窗體,只有加入組件的窗體才是用途的,接下來(lái)的就介紹如何在窗體上加入組件。 三.在窗體上加入組件(form2.vb): 在.Net FrameWork的基本類(lèi)型庫(kù)中提供了很多可以常用的組件。在窗體中加入組件一般需要以下三個(gè)步驟: (1).定義一個(gè)組件變量 (2).獲得一個(gè)組件的實(shí)例并初始化 (3).在窗體上加入組件 在程序中應(yīng)注意以下幾點(diǎn): (1).由于在VB.NET中,每個(gè)變量都有著不同的范圍。所有在什么地點(diǎn)聲明變量就顯得比較重要。譬如在一個(gè)函數(shù)中聲明的變量只能在此函數(shù)中使用。如果你想在整個(gè)Class中使用某個(gè)變量,就在Class的基本聲明。 (2).得到一個(gè)組件的實(shí)例和獲得一個(gè)對(duì)象的實(shí)例相似。使用了NEW關(guān)鍵字,你就獲得了一個(gè)組件的的實(shí)例,就可以加入到Form中。但是你不能直接加入到Form中,因?yàn)樵贔orm類(lèi)中沒(méi)有加入組件的方法。但是Form類(lèi)可以繼承Control類(lèi)中的Controls屬性。在Form類(lèi)中,可以使用這個(gè)屬性得到窗體中的System.Windows.Forms.Form.ControlCollection對(duì)象。在Form.ControlCollection類(lèi)中描述了所有可以在窗體中使用的組件。你可以使用其中的Add和Remove方法在窗體中加入或者是刪除組件。 在理解了上面的知識(shí)以后,我們就試圖來(lái)在窗體上加入一個(gè)按鈕和一個(gè)文本框。 以下就是源程序代碼(Form2.vb)和程序運(yùn)行后的界面 Imports System.Drawing Imports System.Windows.Forms Imports System.ComponentModel Imports System Public Class Form1 Inherits Form 注釋?zhuān)?定義一個(gè)按鈕和文本框 Private Button1 As Button Private TextBox1 As TextBox Public Sub New() InitializeComponent ( ) End Sub Private Sub InitializeComponent() Me.Text = "在窗體上加入組件!" Me.Width = 400 Me.Height = 300 Button1 = New Button ( ) TextBox1 = New TextBox ( ) Button1.Left = 200 Button1.Top = 200 Button1.Width = 100 Button1.Height = 40 Button1.TabIndex = 0 Button1.Text = "確定" TextBox1.Left = 200 TextBox1.Top = 30 TextBox1.Width = 150 TextBox1.Height = 40 Me.Controls.Add ( Button1 ) Me.Controls.Add ( TextBox1 ) End Sub End Class Module Module1 Sub Main ( ) Application.Run ( new Form1 ( ) ) End sub End Module 通過(guò)以下編譯命令編譯后,運(yùn)行界面如下: Vbc /t:winexe /r:system.dll /r:system.windows.forms.dll form2.vb 圖02:加入了一個(gè)按鈕和一個(gè)文本框的窗體 四.添加了事件的窗體(form3.vb): VB.NET的上一個(gè)版本是VB,他準(zhǔn)確的說(shuō)不是一個(gè)完全的面向?qū)ο蟮木幊陶Z(yǔ)言,而是一個(gè)面向事件的編程語(yǔ)言。在VB中,編寫(xiě)響應(yīng)事件的程序是一件非常容易的事情。例如:如果你已經(jīng)創(chuàng)建了一個(gè)按鈕叫Button1,你要編響應(yīng)點(diǎn)擊此按鈕的事件,你所要做的全部工作就是創(chuàng)建一個(gè)叫Button1_Click的事件過(guò)程。(實(shí)際上VB的IDE已經(jīng)替你做了這些)。在VB.NET中也是如此,在設(shè)計(jì)模式下,你建立一個(gè)組件,你就可以通過(guò)點(diǎn)擊此組件告訴Visual Studio .Net你想要寫(xiě)什么樣事件處理過(guò)程。但在本節(jié),我們將告訴你如何手動(dòng)完成這些,這樣將會(huì)有助于你理解在VB.NET中事件是如何工作的。 如果你想要一個(gè)對(duì)象響應(yīng)事件,那么在聲明他的時(shí)候要帶上關(guān)鍵字WithEvents。例如,如果你想在程序中編寫(xiě)一個(gè)按鈕的事件,在聲明的時(shí)候用: Private WithEvents Button1 As Button 代替: 接著你還有為對(duì)象要響應(yīng)的事件創(chuàng)建事件過(guò)程。例如,對(duì)一個(gè)Button1,要編寫(xiě)單擊(Click)過(guò)程,你就需要?jiǎng)?chuàng)建Button1_Click,具體如下: Private Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button1.Click 注釋?zhuān)涸诖藢?xiě)事件處理代碼 End Sub Form類(lèi)和所有組件的類(lèi)都繼承了Control類(lèi)中的事件。在.Net FrameWork中的手冊(cè)中,System.Windows.Forms.Control中共定義了大約58個(gè)事件,像:Click,DoubleClick, GotFocus, LostFocus, KeyUp等等。 以下就是在窗體中定義了Button1的Click和GotFocus事件的例子。 源程序代碼(form3.vb),及運(yùn)行后的界面 Imports System.Drawing Imports System.Windows.Forms Imports System.ComponentModel Imports System Public Class Form1 Inherits Form Private WithEvents Button1 As Button Private TextBox1 As TextBox Public Sub New() InitializeComponent ( ) End Sub Private Sub InitializeComponent ( ) Me.Text = "處理事件的窗體!" Me.Width = 400 Me.Height = 300 Button1 = New Button ( ) TextBox1 = New TextBox ( ) Button1.Left = 200 Button1.Top = 200 Button1.Width = 100 Button1.Height = 40 Button1.TabIndex = 0 Button1.Text = "按鈕" TextBox1.Left = 200 TextBox1.Top = 30 TextBox1.Width = 150 TextBox1.Height = 40 Me.Controls.Add ( Button1 ) Me.Controls.Add ( TextBox1 ) End Sub Private Sub Button1_Click ( ByVal senderAs Object , _ ByVal e As System.EventArgs ) Handles Button1.Click TextBox1.Text = "單擊按鈕!" End Sub Private Sub Button1_GotFocus ( ByVal senderAs Object, _ ByVal e As System.EventArgs ) Handles Button1.GotFocus TextBox1.Text = "按鈕獲得了焦點(diǎn)!" End Sub End Class Module Module1 Sub Main ( ) Application.Run ( new Form1 ( ) ) End sub End Module 在用以下命令編譯文件,運(yùn)行后得到以下界面: 圖03:按鈕獲得焦點(diǎn)時(shí)的運(yùn)行界面 圖04:點(diǎn)擊按鈕時(shí)的運(yùn)行界面 五.總結(jié) 至此我們已經(jīng)完成了用VB.NET做一個(gè)完整的Windows應(yīng)用程序的全部過(guò)程,雖然結(jié)構(gòu)上相對(duì)簡(jiǎn)單,但都比較具有代表性,可以觸類(lèi)旁通,在此基礎(chǔ)上創(chuàng)建出結(jié)構(gòu)更復(fù)雜、功能更完備的Windows應(yīng)用程序。 轉(zhuǎn)帖于 Xue163.com_VB.NET |
|