Visual Basic.NET 程序設計
第一(yī)部分(fēn) (簡介)
1. 使用菜單和對話(huà)框
1.1 菜單
菜單是由MainMenu控件創建的主菜單,使用菜單項(MenuItem)對象向MainMenu添加菜單項。
注意:若要創建子菜單,可将MenuItem對象添加到父MenuItem的MenuItem集合中(zhōng)
1.2 對話(huà)框
七個标準的對話(huà)框控件
OpenFileDialog、SaveFileDialog、FontDialog、ColorDialog、PrintDialog、PrintPreviwDialog、PageSetupDialog
使用ShowDialog方法和DialogResult屬性來确定用戶操作。
1.3 爲菜單指定快捷健(shortcut key)
設定MenuItem的Shortcut屬性就可以了!microsoft提供了許多的快捷健可以選擇。
2. 使用工(gōng)具箱控件
1.1 收集用戶輸入的控件(4個重要)
RadioButton(單選框)
CheckBox(複選框)
ListBox(列表框)
ComboBox(下(xià)拉列表框)
TextBox(文本框)
PictureBox(圖片框)
1.2 LinkLabel控件
提供Web連接訪問,使用system.Diagnostics.process(namespace)的start方法訪問web網址。
3. Nothing 爲一(yī)個object物(wù)件
Nothing 表示當前沒有對象分(fēn)配給變量。代碼開(kāi)始運行時,除了聲明中(zhōng)包含賦值的對象變量,對象變量初始化爲 Nothing
第二部分(fēn) (編程基礎)
所有的Visual Basic.NET變量都必須在使用前聲明。隻有在使用了Option Explicit Off語句時,才允許隐式聲明變量(使用沒有事先聲明的變量)-不提倡這種方式
Visual Basic.NET不在支持variant(變體(tǐ))數據類型,需要用Dim語句來聲明所有的變量,用關鍵詞“as”定義變量所存儲的數據類型。
Visual Basic.NET包含一(yī)種新語句:Option Strict。使用該語句時,參與加減,比較或者混合運算的變量必須是同種類型(有時變量類型也可以不一(yī)樣,隻要這樣不至于導緻數據丢失即可)
Visual Basic.NET不在提供用于數學運算的内部關鍵詞(例如abs或者Cos)而是必須使用.NET框架中(zhōng)System.math類庫中(zhōng)的方法來實現運算
Visual Basic.NET中(zhōng)有一(yī)個Messagebox類,他代替了原來的Msgbox函數用于顯示消息的對話(huà)框,可以使用Messagebox.show來顯示一(yī)個對話(huà)框。
編寫程序語句時必須遵守的規則叫語法(syntax)
變數命名約定:
每個變量必須以字母開(kāi)頭,并且變量名不能包含有下(xià)劃線(Visual Basic約定),變量名由字母,數字元元和下(xià)劃線組成
變量名的長度沒有限制,但爲了閱讀方便,應該盡量保持在33字符以下(xià)
如果條件允許,可以把幾個單詞連起來作爲變量名,這樣的變量具有更強的描述性,例如:變量名SalesTaxRate比Tax或者Rate更能清楚表達變數的用途(銷售稅金率)
可以根據需要混合使用大(dà)小(xiǎo)寫字母和數字元元,一(yī)個不成文的規定,變量的首字母大(dà)寫,例如:DateOfBirth。但是一(yī)些程序員(yuán)更熱衷于“Camel Casing”(小(xiǎo)寫首字母)方式,把變量名同函數名和模塊名區分(fēn)開(kāi)。
不要使用Visual Basic約定的關鍵詞當做變量名。
使用某些單詞的縮寫來表示變量存儲的數據類型。例如:strname,這說明name存儲的是string類型的變量。這個概念是由Charles Simonyi提出的,有時也叫Hungarian naming約定。
數據類型(特定)
數據類型 大(dà)小(xiǎo) 範圍 用法實例
Short 16位 -32768到32768
Integer 32位 -2147483648到2147483648
Long 64位 -2^63到2^63
Single 32位浮點 -3.4028…E38到3.4028…E38
Double 64位浮點 -1.79…E308 To 1.79…E308
Byte 8位 0 to 255
Char 16位 在0-65535範圍内的符号(編碼)
String 每個字符一(yī)字節 很多
Boolean 16位 True 或者False(0爲false)
Date 64位 1001到31999
常量(constant)用于替代不變的數值或文本串的具有描述性的元素。例如:
Const pi As Double=3.14159265
操作 語言元素
算術 ^、-、*、/、\、Mod、+、=
賦值 =、^=、*=、/=、\=、+=、-=? &=
比較 =、<>、<、>、<=、>=、Like、is
串聯 &、+
邏輯/按位運算 Not、And、Or、Xor、AndAlso、OrElse
其它運算 AddressOf、GetType
使用.NET框架中(zhōng)的數學方法
如果要對數值進行處理,這些方法是由NET框架提供的。.NET框架其實就是一(yī)個類庫(Class Library)。存在于System.Math(NameSpace)中(zhōng)。
小(xiǎo)結:
從.NET框架中(zhōng)引用類庫
Import System.Math
使用對話(huà)框顯示輸出信息
Msgbox函數或者Messagebox.Show方法來顯示對話(huà)框
使用對話(huà)框來獲取輸入信息
使用InputBox函數,并将結果賦值給變量。
判斷結構
Visual Basic.NET 新添加的兩個邏輯運算符(andalso 和 orelse)
result = expression1 AndAlso expression2
如果 expression1 和 expression2 都計算爲 True,則 result 爲 True。如果 expression1 計算爲 True,而 expression2 計算爲 False,則 result 爲 False。如果 expression1 計算爲 False,則不計算 expression2,并且 result 爲 False(稱該運算符使表達式短路)
result = expression1 OrElse expression2
如果 expression1 和 expression2 中(zhōng)有一(yī)個計算爲 True,則 result 爲 True。如果 expression1 計算爲 True,則不計算 expression2,并且 result 爲 True(稱該運算符已使表達式短路)。
Timer(計時器)控件
可以使程序按指定的時間間隔不斷的執行某語句,timer控件就象一(yī)個秒表,利用它可以使程序訪問系統時鍾。
Interval 間隔時間(以毫秒爲單位)
Enabled 激活計時器(false,true)
調試Visual Basic.NET程序
在Visual Basic.NET程序中(zhōng)可能發生(shēng)3種類型的錯誤:
1. 語法錯誤(或者編譯器錯誤)語法錯誤是一(yī)種編程錯誤(把屬性或者關鍵字寫錯),這種錯誤違反了VB的語法規則
2. 運行時錯誤 在運行期間會導緻程序意外(wài)終止運行的錯誤
3. 邏輯錯誤 邏輯錯誤是一(yī)種人爲的錯誤,這種錯誤會導緻程序得到錯誤的結果
要在命令窗口使用命令模式,可以在窗口模式下(xià)輸入>cmd,要切換立即窗口,可以使用>immed。然後回車(chē)(return)
使用結構化錯誤處理程序捕獲錯誤
使用try……catch結構處理錯誤,錯誤處理程序利用Try…Catch語句和名爲Err的特殊的錯誤處理對象來處理和捕獲錯誤。Err對象有兩個屬性:Number和Description。Number屬性包含運行時錯誤編号,而Description屬性包含錯誤信息的描述
Try
包含可能産生(shēng)運行錯誤的語句
Catch
一(yī)旦運行錯誤發生(shēng)就會被執行的語句
Finally
不管錯誤是否發生(shēng)都會被執行的語句(Optional)〔可選〕
End Try
因爲程序越來越複雜(zá),所以需要編寫更爲複雜(zá)完善的Try…Catch錯誤程序程序。Try…Catch的複雜(zá)性是指:
允許Try…Catch中(zhōng)有多行代碼
提供Catch When來處理特定的錯誤
允許嵌套Try…Catch代碼塊,用于創建複雜(zá)且完善的錯誤處理程序
Err對象,特殊的Visual Basic對象。每次産生(shēng)運行時錯誤時,該對象都會被賦予詳細的錯誤處理信息。Number & Description是最有用的兩個屬性。Err.Number屬性的值是最近發生(shēng)錯誤的編号。
Description屬性則包含運行時錯誤的描述
檢測多個運行錯誤:
Try
可能産生(shēng)運行時錯誤的語句
Catch When Err.Number
提示錯誤信息
…
Catch When Err.Number
提示錯誤信息
Catch
提示錯誤信息
End Try
Catch When用來捕獲指定的錯誤,Catch用來捕獲所有其他的錯誤,也就是Catch When并未指定的錯誤信息。如果Catch When一(yī)旦執行,Catch就不會執行了!
自定義錯誤函數
public function custonError(byval 自定義變量 as 數據類型) as Integer
dim count as integer=0
Try
可能産生(shēng)運行時錯誤的語句
Catch
運行時錯誤處理程序
Count=1
End Try
Select Case Count
Case 0 ‘代表沒有運行時錯誤
Return 0
Case 1 ‘代表有運行時錯誤發生(shēng)
Return 1
End Select
End Function
可以反複運行該自定義錯誤處理函數,來檢測用戶是否已經糾正了執行錯誤。
錯誤處理程序和防錯編程技術的比較
錯誤處理程序不是包含程序免受運行時錯誤困擾的唯一(yī)機制。還有種叫做驗證技術(防錯編程)if … then就是執行驗證技術的語句。
補充:Exit Try語句(快捷的中(zhōng)斷語句)
用于提前推出Try…Catch代碼塊。Exit Try可以實現完全跳出Try 或者Catch代碼塊。如果代碼塊中(zhōng)有Finally,則該子句還是要執行的
小(xiǎo)結:
本章學習的Try…Catch(處理運行時錯誤的結構化語句),可以使用Catch When來實現處理特定的錯誤,搭配Err.Number來實現。
使用模塊和過程
标準模塊(standard module)。它是個程序中(zhōng)的一(yī)個單獨的容器,輕重刻意包含全局變量(或稱公共變量),函數過程和子過程。
Module
…
End Module
Visual Basic.NET改變了參數傳遞到過程的方式。默認是ByVal(即過程内部參數的改動不會被傳送回調用的例程)傳值方式。還有種ByRef(即過程内部參數的改動會被傳會調用的例程)引用方式。
在Visual Basic.NET中(zhōng)調用過程,所有的參數都必須用括号括起來-即使過程不需要參數。
使用return來返回結果給函數,或者給函數賦值。
編寫函數過程
函數過程位于Function…End Function之間。
Function FunctionName([arguments]) as DataType
Function statements
[return value]
End Function
編寫子過程(sub)
子過程和函數基本類似,唯一(yī)的區别就是過程不能通過過程名返回值。子過程同樣可以在調用期間處理和返回變量,并可通過其參數将函數值返回給調用例程。
Sub procedureName([arguments]) [ pr5siVE ]
Porcedure statements
End Sub
如何決定選用ByVal 還是 ByRef
1. 當不需要在調用過程中(zhōng)修改通過參數傳遞到過程的變量時,使用ByVal
2. 當需要在調用過程中(zhōng)修改通過參數傳遞到過程的變量時,使用ByRef
3. 不确定的使用,使用ByVal
使用數組和集合管理數據
元素數固定的數組成爲定長數組(Fixed array),元素可變的數組稱爲動态數組(dynamic array)
定長數組
Dim ArrayName(dim1index,dim2index,……) as DataType
ArrayName是數組變量名
Dim1index是第一(yī)維的上限值,等于其元素減1。
Dim2index是第二維的上限值,等于其元素減1。
DataType是數組中(zhōng)存儲的數據的類型
數組的下(xià)限值總是0,上限值可以用Ubound(數組名)來返回。
動态數組(dynamic array)
Dim ArrayName() as DataType
使用ReDim來重新來定義數組的大(dà)小(xiǎo),重新定義以後,數組裏的數據全部丢失。隻能重新定義的數組維度的上限,維度必須于原數組一(yī)緻。不能改變數組的維度
使用ReDim Preserve 來保存數組中(zhōng)的數據。
ReDim 語句用來更改已被正式聲明的數組的一(yī)個或多個維度的大(dà)小(xiǎo)。ReDim 無法更改該數組的秩(維度數目)。
ReDim 語句無法更改數組變量的數據類型,或無法提供數組元素的新初始化值。
ReDim 釋放(fàng)現有數組并且創建具有相同秩的新數組。除非指定 Preserve,否則新數組的元素初始化成它們的數據類型的默認值。
如果包含 Preserve 關鍵字,Visual Basic 将這些元素從現有數組複制到新數組。使用 Preserve 時,隻可以重新調整數組的最後維度的大(dà)小(xiǎo),對于其他每個維,必須指定它在現有數組中(zhōng)已經具有的相同大(dà)小(xiǎo)。
例如,如果數組隻有一(yī)維,可以重新調整該維度并依然保留該數組的内容,因爲它是最後的和唯一(yī)的維度。然而,如果數組具有兩個或多個維度,則如果使用 Preserve 将僅可以更改最後維度的大(dà)小(xiǎo)。
使用對象集合
一(yī)個集合就是一(yī)組相關聯的對象,用于在Visual Basic程序中(zhōng)來處理控件對象和其他數據。在Visual Basic術語中(zhōng),窗體(tǐ)上的所有對象合稱爲控件集合(controls)。程序中(zhōng)的每個集合都有唯一(yī)的名稱。因此可以在程序代碼中(zhōng)可以将其作爲一(yī)個獨立單元。
引用集合中(zhōng)的對象
如果指定了一(yī)個對象在集合中(zhōng)的索引位置,就能在程序中(zhōng)使用集合内的對象。Visual Basic按照程序創建對象的相反順序在集合中(zhōng)存儲對象。因此索引0就是最後一(yī)個創建的對象。
For Each element In group
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]
element
必選項。變量。用于疊代通過集合或數組的元素。element 的數據類型必須是 group 元素的數據類型能夠隐式轉換到的類型。
group
必選項。對象變量。必須引用對象集合或數組。
statements
可選項。在 For Each 和 Next 之間的針對 group 中(zhōng)的每項執行的一(yī)條或多條語句。
創建自己的集合
Visual Basic.NET允許創建自定義集合來跟蹤程序中(zhōng)的數據并系統對數據進行處理。盡管集合通常用來存儲對象。例如用戶界面上的控件對象,但是也可以用來在程序運行期間存儲數值或者字符串,因此集合是數組的一(yī)種補充。
Collection 對象是可作爲一(yī)個單元引用的一(yī)組有序項。
聲明自定義集合
Dim CollectionName as New Collection()
使用add方法來添加集合的Item項
處理文本文件和字符串
打開(kāi)文件
FileOpen(句柄,文件名,打開(kāi)方式)
FileClose(句柄) 關閉由FileOpen()打開(kāi)的文件。
檢查是否到達文件末尾 EOF(句柄)
While not EOF(1)
statements
END While
将格式化的顯示數據寫入順序文件。
Public Sub Print( ByVal FileNumber As Integer, _
ByVal ParamArray Output() As Object ) ‘自動換行
- 或 -
Public Sub PrintLine( ByVal FileNumber As Integer, _
ByVal ParamArray Output() As Object ) ‘寫一(yī)次換一(yī)行
一(yī).用 Print 寫入的數據通常由 LineInput 或 Input 從文件中(zhōng)讀取。
Public Sub Input(FileNumber As Integer, ByRef Value As Object ) 從打開(kāi)的順序文件中(zhōng)讀取數據并将數據分(fēn)配給變量
Public Function LineInput(ByVal FileNumber As Integer) As String 從打開(kāi)的順序文件中(zhōng)讀取一(yī)行數據并将它賦給 String 變量。
對文本進行排序
ASCII是American Standard Code for Information Interchange的英文縮寫,全稱爲美國信息交換标準碼。例如“a”對應的ASCII碼就是97,“A”對應的ASCII碼就是65。
得到對應字符的ASCII,使用ASC(number as integer)函數
得到對應數字的字符,使用Chr( chrvalue as char)函數
我(wǒ)(wǒ)編寫的排序函數,将一(yī)個随便輸入的字符串型的數組進行排序,使用值引用型
Sub largeValue(ByRef sort() As String) '排序(按升序)如果要降序可以将">"改成"<"
Dim lenge, spin, j, i As Short
Dim temp As String
spin = 1 'spin 代表的是比較的初始值,從第二個元素開(kāi)始比較
lenge = UBound(sort) '數組的下(xià)标
For j = 0 To lenge – 1
For i = spin To lenge
If sort(j) > sort(i) Then
temp = sort(j)
sort(j) = sort(i)
sort(i) = temp
End If
Next i
spin = spin + 1
Next j
End Sub
補充知(zhī)識:使用Xor運算符
對兩個 Boolean 表達式執行邏輯異或運算,或對兩個數值表達式執行按位異或運算。
result = expression1 Xor expression2
對于Boolean表達式,有且隻有一(yī)個爲真才爲真。
對于兩個數值表達式按位進行異或運算。
例如:10 Xor 8 result=2(1010 xor 1000)按位異或運算
部署Visual Basic.NET應用程序
Visual Basic.NET應用程序是對程序集本身進行編譯的,程序集是包含程序運行所必須的文件的部署單元,程序集的内容包含了很多必要的信息,因此Visual Studio.NET應用程序無須在操作系統中(zhōng)正式注冊,Visual Basic.NET應用程序很容易安裝,使用Xcopy既可以安裝,隻有另一(yī)台電腦上有.net框架即可。但是用戶更傾向于有圖形界面的安裝程序,也更受歡迎。而且通常需要在操作系統中(zhōng)注冊應用程序,以便在“控制面闆”中(zhōng)的“添加/删除程序”卸載程序。
在發布應用程序的時候,Visual Basic.NET提供了幾中(zhōng)不同的方法了解決部署問題:
1. 将應用程序安裝到你的計算機上,并在Windows系統中(zhōng)進行注冊
2. 創建一(yī)個允許通過局域網或者Internet安裝應用程序的安裝程序
3. 使用一(yī)張或多張光盤來部署應用程序
4. 使用壓縮文件(*.CAB)部署應用程序。壓縮技術可以實現使用Web浏覽器下(xià)載文件。
高級用戶界面設計-管理Windows窗體(tǐ)
對話(huà)框在Visual Basic中(zhōng)叫做有模窗體(tǐ)(Modal),它顯示在屏幕上時,用戶必須對它進行處理(定位文件,填寫内容,單擊OK等等),否則它将始終保持爲活動窗口(即必須響應),使用ShowDialog方法來打開(kāi)。
System.Windows.Form.ShowDialog返回值是Dialogresult類型
可以給響應窗口設置Dialogresult屬性(OK,Yes,No等)
對于其他的非模式窗體(tǐ)或者無模式窗體(tǐ)(nonmodal & modelless)使用Show來打開(kāi)窗體(tǐ),使用Close()方法來關閉窗體(tǐ)。
在Windows桌面上安排窗體(tǐ)位置
Visual Basic.NET使用了一(yī)個新的屬性--DeskopBounds(必須在運行中(zhōng)才能讀取&設置);由于DesktopBounds屬性以矩形結構作爲參數(X,Y,Width,Height),所以它可以設置窗體(tǐ)的大(dà)小(xiǎo),也可以設置在桌面的位置。
也可以使用Form.StartPosition屬性,它有五個參數Manual,CenterScreen,
WindowsDefaultLocation(Windows默認值),WindowsDefaultBounds(Windows默認邊界)&
CenterParent(父窗口中(zhōng)央)
如果設置Form.StartPosition=FormStartPosition.Manual,,然後可以使用Location或者Left(y),Top(x)來定位窗體(tǐ)的位置,Location它有兩個參數(x,y)
在窗體(tǐ)上排列控件
使用Anchor(錨點)屬性和Dock(停靠)屬性,前者強迫窗體(tǐ)上的對象于窗體(tǐ)的某個特定邊緣保持固定距離(lí),後者強迫對象與窗體(tǐ)邊緣保持接觸。
補充知(zhī)識:指定啓動對象
通過調整項目的屬性頁對話(huà)框中(zhōng)的設置,就可以對其進行更改。但是還有一(yī)種辦法:指定Visual Basic首先執行名爲Sub Main的過程。該過程可以聲明公共變量,并在一(yī)系列特定測試完成以後載入一(yī)個或者多個窗體(tǐ)。
添加圖形和動畫效果(使用System.Drawing命名空間)
Visual Basic 6中(zhōng)的關鍵字Circle,Line和Pset已經被System.Drawing.Craphics類中(zhōng)的DrawEllipse(橢圓)和DrawLine以及被Point()代替
Visual Basic.NET中(zhōng)的默認坐标系統是現在以像素爲單位,不是缇。
更新空間的位置可以使用Location或者Le 更新空間的位置可以使用Location或者Left(x) & Top(y)來定位,或者使用
SetBound(x,y,width,height)
如果計劃在一(yī)個複雜(zá)的動畫效果中(zhōng)成千上百萬次移動一(yī)個對象,Visual Basic.NET的設計者建議不要使用兩條程序來來定位對象,Microsoft推薦使用Location屬性。
繼承窗體(tǐ)和創建基類
在面向對象的編程(OOP)中(zhōng),繼承以爲着一(yī)個類接受另一(yī)個類的對象,屬性,方法和其他特性
Inherits System.Windows.Forms.Form
例如在每個新建窗體(tǐ)的最上端都要這麽一(yī)行代碼,代表繼承Forms類庫中(zhōng)的form窗體(tǐ)。
類在面向對象的編程中(zhōng)很重要,因爲類使您可以将相關項分(fēn)組在一(yī)個單元中(zhōng)并控制對于其他過程這些項的可見性和可訪問性。類還可以繼承和重複使用在其他類中(zhōng)定義的代碼。
創建屬性
一(yī)個GET代碼塊(它決定了程序員(yuán)檢查屬性的時候會看到什麽),一(yī)個SET代碼塊(它決定了設置或者更改屬性時會發生(shēng)什麽),還有一(yī)個End Property語句來結束屬性過程。
創建方法
就是建立過程或者函數(Sub & Function)
使用ADO.NET
ADO.NET通過一(yī)個名爲CurrencyManager的對象來持續跟蹤當前記錄的有關信息和記錄總數。每個數據集都有一(yī)個CurrencyManager對象。而且每個Windows窗體(tǐ)也都有一(yī)個跟蹤窗體(tǐ)上所有CurrencyManager對象的BindingContext對象。
Windows 窗體(tǐ)控件綁定到的任何數據源将都具有一(yī)個關聯的 CurrencyManager 對象。CurrencyManager 對象跟蹤位置,另外(wài)監控對該數據源的綁定。對于當前綁定到的每個離(lí)散數據源,在窗體(tǐ)上都有一(yī)個 CurrencyManager 對象。如果窗體(tǐ)上的所有控件都綁定到一(yī)個源(例如,如果幾個 TextBox控件綁定到同一(yī)數據表),那麽它們将共享同一(yī)個 CurrencyManager。但是,有時窗體(tǐ)上的控件将綁定到不同的源。在這種情況下(xià),窗體(tǐ)上有多個 CurrencyManager 對象,每個都跟蹤控件正在使用哪個記錄或數據元素。
另外(wài),每個 Windows 窗體(tǐ)都有一(yī)個 BindingContext 對象。BindingContext 對象跟蹤窗體(tǐ)上的所有 CurrencyManager 對象。因此,任何具有數據綁定控件的 Windows 窗體(tǐ)都至少有一(yī)個跟蹤一(yī)個(或多個)CurrencyManager 對象的 BindingContext 對象,而每個 CurrencyManager 對象又(yòu)跟蹤一(yī)個數據源。如果使用容器控件,如 GroupBox、Panel 或 TabControl 來包含數據綁定控件,則可以隻爲該容器控件及其控件創建一(yī)個 BindingContext。這使窗體(tǐ)的各個部分(fēn)都由它自己的 CurrencyManager 對象來管理。有關爲同一(yī)數據源創建多個 CurrencyManager 對象的更多詳細信息,請參閱 BindingContext 構造函數。
Internet Explorer對象不是一(yī)個包括在Visual Basic.NET工(gōng)具箱中(zhōng)的控件,它是一(yī)個标準的COM庫,駐留于所有擁有Internet Exporler已安裝副本的系統中(zhōng)
如果想在程序中(zhōng)使用Internet Explorer事件,首先需要修改程序代碼中(zhōng)聲明Internet Explorer變量語句。由COM組件生(shēng)成的事件并不轉動列在代碼編輯器的〔方法名稱〕下(xià)拉列表框。然而,可以在變量聲明時通過使用WithEvents關鍵字來将這些事件包括其中(zhōng)。
例如:
Public WithEvents Explorer As SHDocVw.InternetExplorer
聲明了一(yī)個Explorer變量(全局變量)。便可以使用Explorer來使用Internet Explorer所有的事件,并可以編寫事件程序,進一(yī)步控制Internet Explorer(浏覽器)。
第一(yī)部分(fēn) (簡介)
1. 使用菜單和對話(huà)框
1.1 菜單
菜單是由MainMenu控件創建的主菜單,使用菜單項(MenuItem)對象向MainMenu添加菜單項。
注意:若要創建子菜單,可将MenuItem對象添加到父MenuItem的MenuItem集合中(zhōng)
1.2 對話(huà)框
七個标準的對話(huà)框控件
OpenFileDialog、SaveFileDialog、FontDialog、ColorDialog、PrintDialog、PrintPreviwDialog、PageSetupDialog
使用ShowDialog方法和DialogResult屬性來确定用戶操作。
1.3 爲菜單指定快捷健(shortcut key)
設定MenuItem的Shortcut屬性就可以了!microsoft提供了許多的快捷健可以選擇。
2. 使用工(gōng)具箱控件
1.1 收集用戶輸入的控件(4個重要)
RadioButton(單選框)
CheckBox(複選框)
ListBox(列表框)
ComboBox(下(xià)拉列表框)
TextBox(文本框)
PictureBox(圖片框)
1.2 LinkLabel控件
提供Web連接訪問,使用system.Diagnostics.process(namespace)的start方法訪問web網址。
3. Nothing 爲一(yī)個object物(wù)件
Nothing 表示當前沒有對象分(fēn)配給變量。代碼開(kāi)始運行時,除了聲明中(zhōng)包含賦值的對象變量,對象變量初始化爲 Nothing
第二部分(fēn) (編程基礎)
所有的Visual Basic.NET變量都必須在使用前聲明。隻有在使用了Option Explicit Off語句時,才允許隐式聲明變量(使用沒有事先聲明的變量)-不提倡這種方式
Visual Basic.NET不在支持variant(變體(tǐ))數據類型,需要用Dim語句來聲明所有的變量,用關鍵詞“as”定義變量所存儲的數據類型。
Visual Basic.NET包含一(yī)種新語句:Option Strict。使用該語句時,參與加減,比較或者混合運算的變量必須是同種類型(有時變量類型也可以不一(yī)樣,隻要這樣不至于導緻數據丢失即可)
Visual Basic.NET不在提供用于數學運算的内部關鍵詞(例如abs或者Cos)而是必須使用.NET框架中(zhōng)System.math類庫中(zhōng)的方法來實現運算
Visual Basic.NET中(zhōng)有一(yī)個Messagebox類,他代替了原來的Msgbox函數用于顯示消息的對話(huà)框,可以使用Messagebox.show來顯示一(yī)個對話(huà)框。
編寫程序語句時必須遵守的規則叫語法(syntax)
變數命名約定:
每個變量必須以字母開(kāi)頭,并且變量名不能包含有下(xià)劃線(Visual Basic約定),變量名由字母,數字元元和下(xià)劃線組成
變量名的長度沒有限制,但爲了閱讀方便,應該盡量保持在33字符以下(xià)
如果條件允許,可以把幾個單詞連起來作爲變量名,這樣的變量具有更強的描述性,例如:變量名SalesTaxRate比Tax或者Rate更能清楚表達變數的用途(銷售稅金率)
可以根據需要混合使用大(dà)小(xiǎo)寫字母和數字元元,一(yī)個不成文的規定,變量的首字母大(dà)寫,例如:DateOfBirth。但是一(yī)些程序員(yuán)更熱衷于“Camel Casing”(小(xiǎo)寫首字母)方式,把變量名同函數名和模塊名區分(fēn)開(kāi)。
不要使用Visual Basic約定的關鍵詞當做變量名。
使用某些單詞的縮寫來表示變量存儲的數據類型。例如:strname,這說明name存儲的是string類型的變量。這個概念是由Charles Simonyi提出的,有時也叫Hungarian naming約定。
數據類型(特定)
數據類型 大(dà)小(xiǎo) 範圍 用法實例
Short 16位 -32768到32768
Integer 32位 -2147483648到2147483648
Long 64位 -2^63到2^63
Single 32位浮點 -3.4028…E38到3.4028…E38
Double 64位浮點 -1.79…E308 To 1.79…E308
Byte 8位 0 to 255
Char 16位 在0-65535範圍内的符号(編碼)
String 每個字符一(yī)字節 很多
Boolean 16位 True 或者False(0爲false)
Date 64位 1001到31999
常量(constant)用于替代不變的數值或文本串的具有描述性的元素。例如:
Const pi As Double=3.14159265
操作 語言元素
算術 ^、-、*、/、\、Mod、+、=
賦值 =、^=、*=、/=、\=、+=、-=? &=
比較 =、<>、<、>、<=、>=、Like、is
串聯 &、+
邏輯/按位運算 Not、And、Or、Xor、AndAlso、OrElse
其它運算 AddressOf、GetType
使用.NET框架中(zhōng)的數學方法
如果要對數值進行處理,這些方法是由NET框架提供的。.NET框架其實就是一(yī)個類庫(Class Library)。存在于System.Math(NameSpace)中(zhōng)。
小(xiǎo)結:
從.NET框架中(zhōng)引用類庫
Import System.Math
使用對話(huà)框顯示輸出信息
Msgbox函數或者Messagebox.Show方法來顯示對話(huà)框
使用對話(huà)框來獲取輸入信息
使用InputBox函數,并将結果賦值給變量。
判斷結構
Visual Basic.NET 新添加的兩個邏輯運算符(andalso 和 orelse)
result = expression1 AndAlso expression2
如果 expression1 和 expression2 都計算爲 True,則 result 爲 True。如果 expression1 計算爲 True,而 expression2 計算爲 False,則 result 爲 False。如果 expression1 計算爲 False,則不計算 expression2,并且 result 爲 False(稱該運算符使表達式短路)
result = expression1 OrElse expression2
如果 expression1 和 expression2 中(zhōng)有一(yī)個計算爲 True,則 result 爲 True。如果 expression1 計算爲 True,則不計算 expression2,并且 result 爲 True(稱該運算符已使表達式短路)。
Timer(計時器)控件
可以使程序按指定的時間間隔不斷的執行某語句,timer控件就象一(yī)個秒表,利用它可以使程序訪問系統時鍾。
Interval 間隔時間(以毫秒爲單位)
Enabled 激活計時器(false,true)
調試Visual Basic.NET程序
在Visual Basic.NET程序中(zhōng)可能發生(shēng)3種類型的錯誤:
1. 語法錯誤(或者編譯器錯誤)語法錯誤是一(yī)種編程錯誤(把屬性或者關鍵字寫錯),這種錯誤違反了VB的語法規則
2. 運行時錯誤 在運行期間會導緻程序意外(wài)終止運行的錯誤
3. 邏輯錯誤 邏輯錯誤是一(yī)種人爲的錯誤,這種錯誤會導緻程序得到錯誤的結果
要在命令窗口使用命令模式,可以在窗口模式下(xià)輸入>cmd,要切換立即窗口,可以使用>immed。然後回車(chē)(return)
使用結構化錯誤處理程序捕獲錯誤
使用try……catch結構處理錯誤,錯誤處理程序利用Try…Catch語句和名爲Err的特殊的錯誤處理對象來處理和捕獲錯誤。Err對象有兩個屬性:Number和Description。Number屬性包含運行時錯誤編号,而Description屬性包含錯誤信息的描述
Try
包含可能産生(shēng)運行錯誤的語句
Catch
一(yī)旦運行錯誤發生(shēng)就會被執行的語句
Finally
不管錯誤是否發生(shēng)都會被執行的語句(Optional)〔可選〕
End Try
因爲程序越來越複雜(zá),所以需要編寫更爲複雜(zá)完善的Try…Catch錯誤程序程序。Try…Catch的複雜(zá)性是指:
允許Try…Catch中(zhōng)有多行代碼
提供Catch When來處理特定的錯誤
允許嵌套Try…Catch代碼塊,用于創建複雜(zá)且完善的錯誤處理程序
Err對象,特殊的Visual Basic對象。每次産生(shēng)運行時錯誤時,該對象都會被賦予詳細的錯誤處理信息。Number & Description是最有用的兩個屬性。Err.Number屬性的值是最近發生(shēng)錯誤的編号。
Description屬性則包含運行時錯誤的描述
檢測多個運行錯誤:
Try
可能産生(shēng)運行時錯誤的語句
Catch When Err.Number
提示錯誤信息
…
Catch When Err.Number
提示錯誤信息
Catch
提示錯誤信息
End Try
Catch When用來捕獲指定的錯誤,Catch用來捕獲所有其他的錯誤,也就是Catch When并未指定的錯誤信息。如果Catch When一(yī)旦執行,Catch就不會執行了!
自定義錯誤函數
public function custonError(byval 自定義變量 as 數據類型) as Integer
dim count as integer=0
Try
可能産生(shēng)運行時錯誤的語句
Catch
運行時錯誤處理程序
Count=1
End Try
Select Case Count
Case 0 ‘代表沒有運行時錯誤
Return 0
Case 1 ‘代表有運行時錯誤發生(shēng)
Return 1
End Select
End Function
可以反複運行該自定義錯誤處理函數,來檢測用戶是否已經糾正了執行錯誤。
錯誤處理程序和防錯編程技術的比較
錯誤處理程序不是包含程序免受運行時錯誤困擾的唯一(yī)機制。還有種叫做驗證技術(防錯編程)if … then就是執行驗證技術的語句。
補充:Exit Try語句(快捷的中(zhōng)斷語句)
用于提前推出Try…Catch代碼塊。Exit Try可以實現完全跳出Try 或者Catch代碼塊。如果代碼塊中(zhōng)有Finally,則該子句還是要執行的
小(xiǎo)結:
本章學習的Try…Catch(處理運行時錯誤的結構化語句),可以使用Catch When來實現處理特定的錯誤,搭配Err.Number來實現。
使用模塊和過程
标準模塊(standard module)。它是個程序中(zhōng)的一(yī)個單獨的容器,輕重刻意包含全局變量(或稱公共變量),函數過程和子過程。
Module
…
End Module
Visual Basic.NET改變了參數傳遞到過程的方式。默認是ByVal(即過程内部參數的改動不會被傳送回調用的例程)傳值方式。還有種ByRef(即過程内部參數的改動會被傳會調用的例程)引用方式。
在Visual Basic.NET中(zhōng)調用過程,所有的參數都必須用括号括起來-即使過程不需要參數。
使用return來返回結果給函數,或者給函數賦值。
編寫函數過程
函數過程位于Function…End Function之間。
Function FunctionName([arguments]) as DataType
Function statements
[return value]
End Function
編寫子過程(sub)
子過程和函數基本類似,唯一(yī)的區别就是過程不能通過過程名返回值。子過程同樣可以在調用期間處理和返回變量,并可通過其參數将函數值返回給調用例程。
Sub procedureName([arguments]) [ pr5siVE ]
Porcedure statements
End Sub
如何決定選用ByVal 還是 ByRef
1. 當不需要在調用過程中(zhōng)修改通過參數傳遞到過程的變量時,使用ByVal
2. 當需要在調用過程中(zhōng)修改通過參數傳遞到過程的變量時,使用ByRef
3. 不确定的使用,使用ByVal
使用數組和集合管理數據
元素數固定的數組成爲定長數組(Fixed array),元素可變的數組稱爲動态數組(dynamic array)
定長數組
Dim ArrayName(dim1index,dim2index,……) as DataType
ArrayName是數組變量名
Dim1index是第一(yī)維的上限值,等于其元素減1。
Dim2index是第二維的上限值,等于其元素減1。
DataType是數組中(zhōng)存儲的數據的類型
數組的下(xià)限值總是0,上限值可以用Ubound(數組名)來返回。
動态數組(dynamic array)
Dim ArrayName() as DataType
使用ReDim來重新來定義數組的大(dà)小(xiǎo),重新定義以後,數組裏的數據全部丢失。隻能重新定義的數組維度的上限,維度必須于原數組一(yī)緻。不能改變數組的維度
使用ReDim Preserve 來保存數組中(zhōng)的數據。
ReDim 語句用來更改已被正式聲明的數組的一(yī)個或多個維度的大(dà)小(xiǎo)。ReDim 無法更改該數組的秩(維度數目)。
ReDim 語句無法更改數組變量的數據類型,或無法提供數組元素的新初始化值。
ReDim 釋放(fàng)現有數組并且創建具有相同秩的新數組。除非指定 Preserve,否則新數組的元素初始化成它們的數據類型的默認值。
如果包含 Preserve 關鍵字,Visual Basic 将這些元素從現有數組複制到新數組。使用 Preserve 時,隻可以重新調整數組的最後維度的大(dà)小(xiǎo),對于其他每個維,必須指定它在現有數組中(zhōng)已經具有的相同大(dà)小(xiǎo)。
例如,如果數組隻有一(yī)維,可以重新調整該維度并依然保留該數組的内容,因爲它是最後的和唯一(yī)的維度。然而,如果數組具有兩個或多個維度,則如果使用 Preserve 将僅可以更改最後維度的大(dà)小(xiǎo)。
使用對象集合
一(yī)個集合就是一(yī)組相關聯的對象,用于在Visual Basic程序中(zhōng)來處理控件對象和其他數據。在Visual Basic術語中(zhōng),窗體(tǐ)上的所有對象合稱爲控件集合(controls)。程序中(zhōng)的每個集合都有唯一(yī)的名稱。因此可以在程序代碼中(zhōng)可以将其作爲一(yī)個獨立單元。
引用集合中(zhōng)的對象
如果指定了一(yī)個對象在集合中(zhōng)的索引位置,就能在程序中(zhōng)使用集合内的對象。Visual Basic按照程序創建對象的相反順序在集合中(zhōng)存儲對象。因此索引0就是最後一(yī)個創建的對象。
For Each element In group
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]
element
必選項。變量。用于疊代通過集合或數組的元素。element 的數據類型必須是 group 元素的數據類型能夠隐式轉換到的類型。
group
必選項。對象變量。必須引用對象集合或數組。
statements
可選項。在 For Each 和 Next 之間的針對 group 中(zhōng)的每項執行的一(yī)條或多條語句。
創建自己的集合
Visual Basic.NET允許創建自定義集合來跟蹤程序中(zhōng)的數據并系統對數據進行處理。盡管集合通常用來存儲對象。例如用戶界面上的控件對象,但是也可以用來在程序運行期間存儲數值或者字符串,因此集合是數組的一(yī)種補充。
Collection 對象是可作爲一(yī)個單元引用的一(yī)組有序項。
聲明自定義集合
Dim CollectionName as New Collection()
使用add方法來添加集合的Item項
處理文本文件和字符串
打開(kāi)文件
FileOpen(句柄,文件名,打開(kāi)方式)
FileClose(句柄) 關閉由FileOpen()打開(kāi)的文件。
檢查是否到達文件末尾 EOF(句柄)
While not EOF(1)
statements
END While
将格式化的顯示數據寫入順序文件。
Public Sub Print( ByVal FileNumber As Integer, _
ByVal ParamArray Output() As Object ) ‘自動換行
- 或 -
Public Sub PrintLine( ByVal FileNumber As Integer, _
ByVal ParamArray Output() As Object ) ‘寫一(yī)次換一(yī)行
一(yī).用 Print 寫入的數據通常由 LineInput 或 Input 從文件中(zhōng)讀取。
Public Sub Input(FileNumber As Integer, ByRef Value As Object ) 從打開(kāi)的順序文件中(zhōng)讀取數據并将數據分(fēn)配給變量
Public Function LineInput(ByVal FileNumber As Integer) As String 從打開(kāi)的順序文件中(zhōng)讀取一(yī)行數據并将它賦給 String 變量。
對文本進行排序
ASCII是American Standard Code for Information Interchange的英文縮寫,全稱爲美國信息交換标準碼。例如“a”對應的ASCII碼就是97,“A”對應的ASCII碼就是65。
得到對應字符的ASCII,使用ASC(number as integer)函數
得到對應數字的字符,使用Chr( chrvalue as char)函數
我(wǒ)(wǒ)編寫的排序函數,将一(yī)個随便輸入的字符串型的數組進行排序,使用值引用型
Sub largeValue(ByRef sort() As String) '排序(按升序)如果要降序可以将">"改成"<"
Dim lenge, spin, j, i As Short
Dim temp As String
spin = 1 'spin 代表的是比較的初始值,從第二個元素開(kāi)始比較
lenge = UBound(sort) '數組的下(xià)标
For j = 0 To lenge – 1
For i = spin To lenge
If sort(j) > sort(i) Then
temp = sort(j)
sort(j) = sort(i)
sort(i) = temp
End If
Next i
spin = spin + 1
Next j
End Sub
補充知(zhī)識:使用Xor運算符
對兩個 Boolean 表達式執行邏輯異或運算,或對兩個數值表達式執行按位異或運算。
result = expression1 Xor expression2
對于Boolean表達式,有且隻有一(yī)個爲真才爲真。
對于兩個數值表達式按位進行異或運算。
例如:10 Xor 8 result=2(1010 xor 1000)按位異或運算
部署Visual Basic.NET應用程序
Visual Basic.NET應用程序是對程序集本身進行編譯的,程序集是包含程序運行所必須的文件的部署單元,程序集的内容包含了很多必要的信息,因此Visual Studio.NET應用程序無須在操作系統中(zhōng)正式注冊,Visual Basic.NET應用程序很容易安裝,使用Xcopy既可以安裝,隻有另一(yī)台電腦上有.net框架即可。但是用戶更傾向于有圖形界面的安裝程序,也更受歡迎。而且通常需要在操作系統中(zhōng)注冊應用程序,以便在“控制面闆”中(zhōng)的“添加/删除程序”卸載程序。
在發布應用程序的時候,Visual Basic.NET提供了幾中(zhōng)不同的方法了解決部署問題:
1. 将應用程序安裝到你的計算機上,并在Windows系統中(zhōng)進行注冊
2. 創建一(yī)個允許通過局域網或者Internet安裝應用程序的安裝程序
3. 使用一(yī)張或多張光盤來部署應用程序
4. 使用壓縮文件(*.CAB)部署應用程序。壓縮技術可以實現使用Web浏覽器下(xià)載文件。
高級用戶界面設計-管理Windows窗體(tǐ)
對話(huà)框在Visual Basic中(zhōng)叫做有模窗體(tǐ)(Modal),它顯示在屏幕上時,用戶必須對它進行處理(定位文件,填寫内容,單擊OK等等),否則它将始終保持爲活動窗口(即必須響應),使用ShowDialog方法來打開(kāi)。
System.Windows.Form.ShowDialog返回值是Dialogresult類型
可以給響應窗口設置Dialogresult屬性(OK,Yes,No等)
對于其他的非模式窗體(tǐ)或者無模式窗體(tǐ)(nonmodal & modelless)使用Show來打開(kāi)窗體(tǐ),使用Close()方法來關閉窗體(tǐ)。
在Windows桌面上安排窗體(tǐ)位置
Visual Basic.NET使用了一(yī)個新的屬性--DeskopBounds(必須在運行中(zhōng)才能讀取&設置);由于DesktopBounds屬性以矩形結構作爲參數(X,Y,Width,Height),所以它可以設置窗體(tǐ)的大(dà)小(xiǎo),也可以設置在桌面的位置。
也可以使用Form.StartPosition屬性,它有五個參數Manual,CenterScreen,
WindowsDefaultLocation(Windows默認值),WindowsDefaultBounds(Windows默認邊界)&
CenterParent(父窗口中(zhōng)央)
如果設置Form.StartPosition=FormStartPosition.Manual,,然後可以使用Location或者Left(y),Top(x)來定位窗體(tǐ)的位置,Location它有兩個參數(x,y)
在窗體(tǐ)上排列控件
使用Anchor(錨點)屬性和Dock(停靠)屬性,前者強迫窗體(tǐ)上的對象于窗體(tǐ)的某個特定邊緣保持固定距離(lí),後者強迫對象與窗體(tǐ)邊緣保持接觸。
補充知(zhī)識:指定啓動對象
通過調整項目的屬性頁對話(huà)框中(zhōng)的設置,就可以對其進行更改。但是還有一(yī)種辦法:指定Visual Basic首先執行名爲Sub Main的過程。該過程可以聲明公共變量,并在一(yī)系列特定測試完成以後載入一(yī)個或者多個窗體(tǐ)。
添加圖形和動畫效果(使用System.Drawing命名空間)
Visual Basic 6中(zhōng)的關鍵字Circle,Line和Pset已經被System.Drawing.Craphics類中(zhōng)的DrawEllipse(橢圓)和DrawLine以及被Point()代替
Visual Basic.NET中(zhōng)的默認坐标系統是現在以像素爲單位,不是缇。
更新空間的位置可以使用Location或者Le 更新空間的位置可以使用Location或者Left(x) & Top(y)來定位,或者使用
SetBound(x,y,width,height)
如果計劃在一(yī)個複雜(zá)的動畫效果中(zhōng)成千上百萬次移動一(yī)個對象,Visual Basic.NET的設計者建議不要使用兩條程序來來定位對象,Microsoft推薦使用Location屬性。
繼承窗體(tǐ)和創建基類
在面向對象的編程(OOP)中(zhōng),繼承以爲着一(yī)個類接受另一(yī)個類的對象,屬性,方法和其他特性
Inherits System.Windows.Forms.Form
例如在每個新建窗體(tǐ)的最上端都要這麽一(yī)行代碼,代表繼承Forms類庫中(zhōng)的form窗體(tǐ)。
類在面向對象的編程中(zhōng)很重要,因爲類使您可以将相關項分(fēn)組在一(yī)個單元中(zhōng)并控制對于其他過程這些項的可見性和可訪問性。類還可以繼承和重複使用在其他類中(zhōng)定義的代碼。
創建屬性
一(yī)個GET代碼塊(它決定了程序員(yuán)檢查屬性的時候會看到什麽),一(yī)個SET代碼塊(它決定了設置或者更改屬性時會發生(shēng)什麽),還有一(yī)個End Property語句來結束屬性過程。
創建方法
就是建立過程或者函數(Sub & Function)
使用ADO.NET
ADO.NET通過一(yī)個名爲CurrencyManager的對象來持續跟蹤當前記錄的有關信息和記錄總數。每個數據集都有一(yī)個CurrencyManager對象。而且每個Windows窗體(tǐ)也都有一(yī)個跟蹤窗體(tǐ)上所有CurrencyManager對象的BindingContext對象。
Windows 窗體(tǐ)控件綁定到的任何數據源将都具有一(yī)個關聯的 CurrencyManager 對象。CurrencyManager 對象跟蹤位置,另外(wài)監控對該數據源的綁定。對于當前綁定到的每個離(lí)散數據源,在窗體(tǐ)上都有一(yī)個 CurrencyManager 對象。如果窗體(tǐ)上的所有控件都綁定到一(yī)個源(例如,如果幾個 TextBox控件綁定到同一(yī)數據表),那麽它們将共享同一(yī)個 CurrencyManager。但是,有時窗體(tǐ)上的控件将綁定到不同的源。在這種情況下(xià),窗體(tǐ)上有多個 CurrencyManager 對象,每個都跟蹤控件正在使用哪個記錄或數據元素。
另外(wài),每個 Windows 窗體(tǐ)都有一(yī)個 BindingContext 對象。BindingContext 對象跟蹤窗體(tǐ)上的所有 CurrencyManager 對象。因此,任何具有數據綁定控件的 Windows 窗體(tǐ)都至少有一(yī)個跟蹤一(yī)個(或多個)CurrencyManager 對象的 BindingContext 對象,而每個 CurrencyManager 對象又(yòu)跟蹤一(yī)個數據源。如果使用容器控件,如 GroupBox、Panel 或 TabControl 來包含數據綁定控件,則可以隻爲該容器控件及其控件創建一(yī)個 BindingContext。這使窗體(tǐ)的各個部分(fēn)都由它自己的 CurrencyManager 對象來管理。有關爲同一(yī)數據源創建多個 CurrencyManager 對象的更多詳細信息,請參閱 BindingContext 構造函數。
Internet Explorer對象不是一(yī)個包括在Visual Basic.NET工(gōng)具箱中(zhōng)的控件,它是一(yī)個标準的COM庫,駐留于所有擁有Internet Exporler已安裝副本的系統中(zhōng)
如果想在程序中(zhōng)使用Internet Explorer事件,首先需要修改程序代碼中(zhōng)聲明Internet Explorer變量語句。由COM組件生(shēng)成的事件并不轉動列在代碼編輯器的〔方法名稱〕下(xià)拉列表框。然而,可以在變量聲明時通過使用WithEvents關鍵字來将這些事件包括其中(zhōng)。
例如:
Public WithEvents Explorer As SHDocVw.InternetExplorer
聲明了一(yī)個Explorer變量(全局變量)。便可以使用Explorer來使用Internet Explorer所有的事件,并可以編寫事件程序,進一(yī)步控制Internet Explorer(浏覽器)。
文章來源:http://www.blueidea.com/bbs/newsdetail.asp?id=1047206