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