- VB.Net 基礎教程
- VB.Net - 首頁
- VB.Net - 概述
- VB.Net - 環境設定
- VB.Net - 程式結構
- VB.Net - 基本語法
- VB.Net - 資料型別
- VB.Net - 變數
- VB.Net - 常量
- VB.Net - 修飾符
- VB.Net - 語句
- VB.Net - 指令
- VB.Net - 運算子
- VB.Net - 決策
- VB.Net - 迴圈
- VB.Net - 字串
- VB.Net - 日期和時間
- VB.Net - 陣列
- VB.Net - 集合
- VB.Net - 函式
- VB.Net - 子程式
- VB.Net - 類和物件
- VB.Net - 異常處理
- VB.Net - 檔案處理
- VB.Net - 基本控制元件
- VB.Net - 對話方塊
- VB.Net - 高階窗體
- VB.Net - 事件處理
- VB.Net 高階教程
- VB.Net - 正則表示式
- VB.Net - 資料庫訪問
- VB.Net - Excel表格
- VB.Net - 傳送郵件
- VB.Net - XML處理
- VB.Net - Web程式設計
- VB.Net 有用資源
- VB.Net 快速指南
- VB.Net - 有用資源
- VB.Net - 討論
VB.Net 快速指南
VB.Net - 概述
Visual Basic .NET (VB.NET) 是一種面向物件的計算機程式語言,在 .NET Framework 上實現。雖然它是經典 Visual Basic 語言的演進,但它與 VB6 向後不相容,任何用舊版本編寫的程式碼都不能在 VB.NET 下編譯。
與所有其他 .NET 語言一樣,VB.NET 完全支援面向物件的特性。VB.NET 中的一切都是物件,包括所有原始型別(Short、Integer、Long、String、Boolean 等)和使用者定義型別、事件,甚至程式集。所有物件都繼承自基類 Object。
VB.NET 由微軟的 .NET framework 實現。因此,它可以完全訪問 .Net Framework 中的所有庫。也可以在 Mono 上執行 VB.NET 程式,Mono 是 .NET 的開源替代方案,不僅可以在 Windows 下執行,甚至可以在 Linux 或 Mac OSX 上執行。
以下原因使 VB.Net 成為一種廣泛使用的專業語言:
現代的,通用的。
面向物件的。
面向元件的。
易於學習。
結構化語言。
它能生成高效的程式。
它可以在各種計算機平臺上編譯。
.Net Framework 的一部分。
VB.Net 的強大程式設計特性
VB.Net 擁有眾多強大的程式設計特性,使其受到全世界眾多程式設計師的喜愛。讓我們提一下其中一些特性:
布林條件
自動垃圾回收
標準庫
程式集版本控制
屬性和事件
委託和事件管理
易於使用的泛型
索引器
條件編譯
簡單的多執行緒
VB.Net - 環境設定
在本章中,我們將討論用於建立 VB.Net 應用程式的工具。
我們已經提到 VB.Net 是 .Net framework 的一部分,用於編寫 .Net 應用程式。因此,在討論執行 VB.Net 程式的可用工具之前,讓我們瞭解 VB.Net 與 .Net framework 的關係。
.Net Framework
.Net framework 是一個革命性的平臺,可以幫助您編寫以下型別的應用程式:
Windows 應用程式
Web 應用程式
Web 服務
.Net framework 應用程式是多平臺應用程式。該框架的設計方式使其可以從以下任何語言使用:Visual Basic、C#、C++、Jscript 和 COBOL 等。
所有這些語言都可以訪問框架並相互通訊。
.Net framework 包含一個龐大的程式碼庫,供 VB.Net 等客戶端語言使用。這些語言使用面向物件的方法。
以下是 .Net framework 的一些元件:
公共語言執行時 (CLR)
.Net Framework 類庫
公共語言規範
公共型別系統
元資料和程式集
Windows 窗體
ASP.Net 和 ASP.Net AJAX
ADO.Net
Windows Workflow Foundation (WF)
Windows Presentation Foundation
Windows Communication Foundation (WCF)
LINQ
有關這些元件各自執行的工作,請參閱 ASP.Net - 簡介,有關每個元件的詳細資訊,請參閱 Microsoft 的文件。
VB.Net 的整合開發環境 (IDE)
Microsoft 提供以下 VB.Net 程式設計開發工具:
Visual Studio 2010 (VS)
Visual Basic 2010 Express (VBE)
Visual Web Developer
最後兩個是免費的。使用這些工具,您可以編寫各種 VB.Net 程式,從簡單的命令列應用程式到更復雜的應用程式。Visual Basic Express 和 Visual Web Developer Express 版本是 Visual Studio 的精簡版本,具有相同的外觀和感覺。它們保留了 Visual Studio 的大部分功能。在本教程中,我們使用了 Visual Basic 2010 Express 和 Visual Web Developer(用於 Web 程式設計章節)。
您可以從 這裡 下載。它會自動安裝到您的機器上。請注意,安裝 Express 版本需要活動的網際網路連線。
在 Linux 或 Mac OS 上編寫 VB.Net 程式
雖然 .NET Framework 執行在 Windows 作業系統上,但也有一些可在其他作業系統上執行的替代版本。Mono 是 .NET Framework 的一個開源版本,它包含一個 Visual Basic 編譯器,並且可以在多個作業系統上執行,包括各種 Linux 和 Mac OS 版本。最新版本是 VB 2012。
Mono 的目標不僅是可以跨平臺執行 Microsoft .NET 應用程式,還可以為 Linux 開發人員帶來更好的開發工具。Mono 可以執行在許多作業系統上,包括 Android、BSD、iOS、Linux、OS X、Windows、Solaris 和 UNIX。
VB.Net - 程式結構
在我們學習 VB.Net 程式語言的基本構建塊之前,讓我們先看看一個最基本的 VB.Net 程式結構,以便我們可以在接下來的章節中將其作為參考。
VB.Net Hello World 示例
VB.Net 程式基本上由以下部分組成:
名稱空間宣告
一個類或模組
一個或多個過程
變數
Main 過程
語句和表示式
註釋
讓我們來看一段簡單的程式碼,它將列印“Hello World”字樣:
Imports System
Module Module1
'This program will display Hello World
Sub Main()
Console.WriteLine("Hello World")
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Hello, World!
讓我們看看上述程式的各個部分:
程式的第一行 **Imports System** 用於在程式中包含 System 名稱空間。
下一行包含一個 **Module** 宣告,即模組 *Module1*。VB.Net 完全面向物件,因此每個程式都必須包含一個模組或類,其中包含程式使用的和過程。
類或模組通常包含多個過程。過程包含可執行程式碼,或者換句話說,它們定義類的行為。過程可以是以下任何一種:
函式
子程式
運算子
Get
Set
AddHandler
RemoveHandler
RaiseEvent
下一行 ('This program) 將被編譯器忽略,它被新增是為了在程式中新增額外的註釋。
下一行定義了 Main 過程,它是所有 VB.Net 程式的入口點。Main 過程宣告模組或類執行的操作。
Main 過程使用以下語句指定其行為:
**Console.WriteLine("Hello World")** *WriteLine* 是在 *System* 名稱空間中定義的 *Console* 類的⼀個方法。此語句導致訊息“Hello, World!”顯示在螢幕上。
最後一行 **Console.ReadKey()** 是為 VS.NET 使用者準備的。當程式從 Visual Studio .NET 啟動時,這將防止螢幕快速執行並關閉。
編譯和執行 VB.Net 程式
如果您使用的是 Visual Studio.Net IDE,請執行以下步驟:
啟動 Visual Studio。
在選單欄上,選擇檔案 → 新建 → 專案。
從模板中選擇 Visual Basic
選擇控制檯應用程式。
使用“瀏覽”按鈕指定專案的名稱和位置,然後選擇“確定”按鈕。
新專案顯示在解決方案資源管理器中。
在程式碼編輯器中編寫程式碼。
單擊“執行”按鈕或按 F5 鍵執行專案。將出現一個命令提示符視窗,其中包含“Hello World”行。
您可以使用命令列而不是 Visual Studio IDE 來編譯 VB.Net 程式:
開啟文字編輯器並新增上述程式碼。
將檔案儲存為 **helloworld.vb**
開啟命令提示符工具並轉到儲存檔案的目錄。
鍵入 **vbc helloworld.vb** 並按 Enter 鍵編譯程式碼。
如果程式碼中沒有錯誤,命令提示符將帶您到下一行,並將生成 **helloworld.exe** 可執行檔案。
接下來,鍵入 **helloworld** 執行程式。
您將能夠看到螢幕上列印的“Hello World”。
VB.Net - 基本語法
VB.Net 是一種面向物件的程式語言。在面向物件程式設計方法中,程式由各種透過操作相互互動的物件組成。物件可以採取的操作稱為方法。相同型別的物件被稱為具有相同的型別,或者更常見的是,被稱為屬於相同的類。
當我們考慮 VB.Net 程式時,它可以定義為透過呼叫彼此的方法進行通訊的物件的集合。現在讓我們簡要地瞭解一下類、物件、方法和例項變數的含義。
**物件** - 物件具有狀態和行為。例如:狗具有狀態——顏色、名稱、品種以及行為——搖尾、吠叫、吃東西等。物件是類的例項。
**類** - 類可以定義為描述其型別物件支援的行為/狀態的模板/藍圖。
**方法** - 方法基本上是一種行為。一個類可以包含許多方法。在方法中編寫邏輯、操作資料和執行所有操作。
**例項變數** - 每個物件都有自己唯一的一組例項變數。物件的狀體是由分配給這些例項變數的值建立的。
VB.Net 中的矩形類
例如,讓我們考慮一個矩形物件。它具有諸如長度和寬度之類的屬性。根據設計,它可能需要接受這些屬性的值、計算面積和顯示詳細資訊的方法。
讓我們來看一下矩形類的實現,並根據我們在其中的觀察結果討論 VB.Net 的基本語法:
Imports System
Public Class Rectangle
Private length As Double
Private width As Double
'Public methods
Public Sub AcceptDetails()
length = 4.5
width = 3.5
End Sub
Public Function GetArea() As Double
GetArea = length * width
End Function
Public Sub Display()
Console.WriteLine("Length: {0}", length)
Console.WriteLine("Width: {0}", width)
Console.WriteLine("Area: {0}", GetArea())
End Sub
Shared Sub Main()
Dim r As New Rectangle()
r.Acceptdetails()
r.Display()
Console.ReadLine()
End Sub
End Class
當上述程式碼編譯並執行時,它會產生以下結果:
Length: 4.5 Width: 3.5 Area: 15.75
在上一章中,我們建立了一個包含程式碼的 Visual Basic 模組。Sub Main 指示 VB.Net 程式的入口點。在這裡,我們使用包含程式碼和資料的類。您可以使用類來建立物件。例如,在程式碼中,r 是一個 Rectangle 物件。
物件是類的例項:
Dim r As New Rectangle()
類可以擁有從類外部訪問的成員,如果這樣指定的話。資料成員稱為欄位,過程成員稱為方法。
共享方法或靜態方法可以在不建立類物件的情況下呼叫。例項方法透過類的物件呼叫 -
Shared Sub Main() Dim r As New Rectangle() r.Acceptdetails() r.Display() Console.ReadLine() End Sub
識別符號
識別符號是用於標識類、變數、函式或任何其他使用者定義項的名稱。VB.Net 中命名類的基本規則如下:
名稱必須以字母開頭,後面可以跟一系列字母、數字 (0-9) 或下劃線。識別符號的第一個字元不能是數字。
它不能包含任何嵌入的空格或符號,例如 ? - +! @ # % ^ & * ( ) [ ] { } . ; : " ' / 和 \。但是可以使用下劃線 (_) 。
它不能是保留關鍵字。
VB.Net 關鍵字
下表列出了 VB.Net 保留關鍵字:
| AddHandler | AddressOf | Alias | And | AndAlso | As | Boolean |
| ByRef | Byte | ByVal | Call | Case | Catch | CBool |
| CByte | CChar | CDate | CDec | CDbl | Char | CInt |
| Class | CLng | CObj | Const | Continue | CSByte | CShort |
| CSng | CStr | CType | CUInt | CULng | CUShort | Date |
| Decimal | Declare | Default | Delegate | Dim | DirectCast | Do |
| Double | Each | Else | ElseIf | End | End If | Enum |
| Erase | Error | Event | Exit | False | Finally | For |
| Friend | 函式 | Get | GetType | GetXMLNamespace | Global | GoTo |
| Handles | If | Implements | Imports | In | Inherits | Integer |
| Interface | Is | IsNot | Let | Lib | Like | Long |
| Loop | Me | Mod | Module | MustInherit | MustOverride | MyBase |
| MyClass | Namespace | Narrowing | New | 下一頁 | Not | Nothing |
| NotInheritable | NotOverridable | Object | Of | On | 運算子 | Option |
| Optional | Or | OrElse | Overloads | Overridable | Overrides | ParamArray |
| Partial | Private | Property | Protected | Public | RaiseEvent | ReadOnly |
| ReDim | REM | RemoveHandler | Resume | Return | SByte | Select |
| Set | Shadows | Shared | Short | Single | Static | Step |
| Stop | String | Structure | 子程式 | SyncLock | Then | Throw |
| To | True | Try | TryCast | TypeOf | UInteger | While |
| Widening | With | WithEvents | WriteOnly | Xor |
VB.Net - 資料型別
資料型別指的是一個廣泛的系統,用於宣告不同型別的變數或函式。變數的型別決定了它在儲存中佔據的空間大小以及如何解釋儲存的位模式。
VB.Net 中可用的資料型別
VB.Net 提供了廣泛的資料型別。下表顯示了所有可用的資料型別:
| 資料型別 | 儲存分配 | 值範圍 |
|---|---|---|
| Boolean | 取決於實現平臺 | True 或 False |
| Byte | 1 位元組 | 0 到 255(無符號) |
| Char | 2 位元組 | 0 到 65535(無符號) |
| Date | 8 位元組 | 0001 年 1 月 1 日 0:00:00(午夜)到 9999 年 12 月 31 日晚上 11:59:59 |
| Decimal | 16 位元組 | 0 到 +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9...E+28) 無小數點;0 到 +/-7.9228162514264337593543950335 小數點後 28 位 |
| Double | 8 位元組 | -1.79769313486231570E+308 到 -4.94065645841246544E-324,對於負值 4.94065645841246544E-324 到 1.79769313486231570E+308,對於正值 |
| Integer | 4 位元組 | -2,147,483,648 到 2,147,483,647(有符號) |
| Long | 8 位元組 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(有符號) |
| Object | 在 32 位平臺上為 4 位元組 在 64 位平臺上為 8 位元組 |
任何型別都可以儲存在 Object 型別的變數中 |
| SByte | 1 位元組 | -128 到 127(有符號) |
| Short | 2 位元組 | -32,768 到 32,767(有符號) |
| Single | 4 位元組 | -3.4028235E+38 到 -1.401298E-45,對於負值; 1.401298E-45 到 3.4028235E+38,對於正值 |
| String | 取決於實現平臺 | 0 到大約 20 億個 Unicode 字元 |
| UInteger | 4 位元組 | 0 到 4,294,967,295(無符號) |
| ULong | 8 位元組 | 0 到 18,446,744,073,709,551,615(無符號) |
| 使用者自定義 | 取決於實現平臺 | 結構的每個成員都有一個由其資料型別確定的範圍,並且獨立於其他成員的範圍 |
| UShort | 2 位元組 | 0 到 65,535(無符號) |
示例
以下示例演示了一些型別的用法:
Module DataTypes
Sub Main()
Dim b As Byte
Dim n As Integer
Dim si As Single
Dim d As Double
Dim da As Date
Dim c As Char
Dim s As String
Dim bl As Boolean
b = 1
n = 1234567
si = 0.12345678901234566
d = 0.12345678901234566
da = Today
c = "U"c
s = "Me"
If ScriptEngine = "VB" Then
bl = True
Else
bl = False
End If
If bl Then
'the oath taking
Console.Write(c & " and," & s & vbCrLf)
Console.WriteLine("declaring on the day of: {0}", da)
Console.WriteLine("We will learn VB.Net seriously")
Console.WriteLine("Lets see what happens to the floating point variables:")
Console.WriteLine("The Single: {0}, The Double: {1}", si, d)
End If
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
U and, Me declaring on the day of: 12/4/2012 12:00:00 PM We will learn VB.Net seriously Lets see what happens to the floating point variables: The Single:0.1234568, The Double: 0.123456789012346
VB.Net 中的型別轉換函式
VB.Net 提供以下內聯型別轉換函式:
| 序號 | 函式和說明 |
|---|---|
| 1 |
CBool(expression) 將表示式轉換為布林資料型別。 |
| 2 |
CByte(expression) 將表示式轉換為 Byte 資料型別。 |
| 3 |
CChar(expression) 將表示式轉換為 Char 資料型別。 |
| 4 |
CDate(expression) 將表示式轉換為 Date 資料型別 |
| 5 |
CDbl(expression) 將表示式轉換為 Double 資料型別。 |
| 6 |
CDec(expression) 將表示式轉換為 Decimal 資料型別。 |
| 7 |
CInt(expression) 將表示式轉換為 Integer 資料型別。 |
| 8 |
CLng(expression) 將表示式轉換為 Long 資料型別。 |
| 9 |
CObj(expression) 將表示式轉換為 Object 型別。 |
| 10 |
CSByte(expression) 將表示式轉換為 SByte 資料型別。 |
| 11 |
CShort(expression) 將表示式轉換為 Short 資料型別。 |
| 12 |
CSng(expression) 將表示式轉換為 Single 資料型別。 |
| 13 |
CStr(expression) 將表示式轉換為 String 資料型別。 |
| 14 |
CUInt(expression) 將表示式轉換為 UInt 資料型別。 |
| 15 |
CULng(expression) 將表示式轉換為 ULng 資料型別。 |
| 16 |
CUShort(expression) 將表示式轉換為 UShort 資料型別。 |
示例
以下示例演示了其中一些函式:
Module DataTypes
Sub Main()
Dim n As Integer
Dim da As Date
Dim bl As Boolean = True
n = 1234567
da = Today
Console.WriteLine(bl)
Console.WriteLine(CSByte(bl))
Console.WriteLine(CStr(bl))
Console.WriteLine(CStr(da))
Console.WriteLine(CChar(CChar(CStr(n))))
Console.WriteLine(CChar(CStr(da)))
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
True -1 True 12/4/2012 1 1
VB.Net - 變數
變數只不過是賦予儲存區域的名稱,我們的程式可以操作它。VB.Net 中的每個變數都有一個特定的型別,它決定了變數記憶體的大小和佈局;可以儲存在該記憶體中的值的範圍;以及可以應用於變數的操作集。
我們已經討論了各種資料型別。VB.Net 中提供的基本值型別可以分為:
| 型別 | 示例 |
|---|---|
| 整數型別 | SByte、Byte、Short、UShort、Integer、UInteger、Long、ULong 和 Char |
| 浮點型別 | Single 和 Double |
| 十進位制型別 | Decimal |
| 布林型別 | True 或 False 值,按分配 |
| 日期型別 | Date |
VB.Net 還允許定義其他變數值型別,如列舉和變數引用型別,如類。我們將在後續章節中討論日期型別和類。
VB.Net 中的變數宣告
Dim 語句用於宣告變數和為一個或多個變數分配儲存空間。Dim 語句用於模組、類、結構、過程或塊級別。
VB.Net 中變數宣告的語法為:
[ < attributelist > ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ] Dim [ WithEvents ] variablelist
其中:
attributelist 是應用於變數的屬性列表。可選。
accessmodifier 定義變數的訪問級別,其值為 - Public、Protected、Friend、Protected Friend 和 Private。可選。
Shared 宣告共享變數,該變數不與類的任何特定例項關聯,而是對類的所有例項可用。可選。
Shadows 指示變數重新宣告並隱藏基類中同名元素或一組過載元素。可選。
Static 指示即使在宣告它的過程終止後,變數也將保留其值。可選。
ReadOnly 表示變數可以讀取,但不能寫入。可選。
WithEvents 指定變數用於響應分配給變數的例項引發的事件。可選。
Variablelist 提供宣告的變數列表。
變數列表中的每個變數都有以下語法和部分:
variablename[ ( [ boundslist ] ) ] [ As [ New ] datatype ] [ = initializer ]
其中:
variablename - 是變數的名稱
boundslist - 可選。它提供陣列變數每個維度的邊界列表。
New - 可選。在 Dim 語句執行時建立類的新的例項。
datatype - 如果 Option Strict 為 On,則為必需。它指定變數的資料型別。
initializer - 如果未指定 New,則為可選。在建立變數時計算並賦值給變數的表示式。
這裡顯示了一些有效的變數宣告及其定義:
Dim StudentID As Integer Dim StudentName As String Dim Salary As Double Dim count1, count2 As Integer Dim status As Boolean Dim exitButton As New System.Windows.Forms.Button Dim lastTime, nextTime As Date
VB.Net 中的變數初始化
變數使用等號後跟常量表達式來初始化(賦值)。初始化的一般形式為:
variable_name = value;
例如:
Dim pi As Double pi = 3.14159
您可以在宣告時初始化變數,如下所示:
Dim StudentID As Integer = 100 Dim StudentName As String = "Bill Smith"
示例
嘗試以下示例,該示例使用了各種型別的變數:
Module variablesNdataypes
Sub Main()
Dim a As Short
Dim b As Integer
Dim c As Double
a = 10
b = 20
c = a + b
Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c)
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
a = 10, b = 20, c = 30
接受使用者的輸入
System 名稱空間中的 Console 類提供了一個ReadLine函式,用於接受使用者的輸入並將其儲存到變數中。例如:
Dim message As String message = Console.ReadLine
以下示例演示了它:
Module variablesNdataypes
Sub Main()
Dim message As String
Console.Write("Enter message: ")
message = Console.ReadLine
Console.WriteLine()
Console.WriteLine("Your Message: {0}", message)
Console.ReadLine()
End Sub
End Module
編譯並執行上述程式碼時,將產生以下結果(假設使用者輸入 Hello World):
Enter message: Hello World Your Message: Hello World
左值和右值
有兩種表示式:
左值 - 可以作為賦值的左側或右側出現的表示式是左值。
右值 - 可以出現在賦值的右側但不能出現在左側的表示式是右值。
變數是左值,因此可以出現在賦值的左側。數字文字是右值,因此不能賦值,也不能出現在左側。以下是有效語句:
Dim g As Integer = 20
但以下語句無效,將生成編譯時錯誤:
20 = g
VB.Net - 常量和列舉
常量指的是程式在其執行過程中可能不會更改的固定值。這些固定值也稱為文字。
常量可以是任何基本資料型別,例如整數常量、浮點常量、字元常量或字串字面量。還有列舉常量。
常量與普通變數一樣,只是它們的定義後值不能修改。
列舉是一組命名的整數常量。
宣告常量
在 VB.Net 中,常量使用Const語句宣告。Const 語句用於模組、類、結構、過程或塊級別,以代替字面值。
Const 語句的語法如下:
[ < attributelist > ] [ accessmodifier ] [ Shadows ] Const constantlist
其中:
attributelist − 指定應用於常量的屬性列表;可以使用多個屬性,用逗號分隔。可選。
accessmodifier − 指定哪些程式碼可以訪問這些常量。可選。值可以是:Public、Protected、Friend、Protected Friend 或 Private。
Shadows − 這使得常量隱藏基類中相同名稱的程式設計元素。可選。
Constantlist − 給出宣告的常量名稱列表。必選。
其中,每個常量名稱具有以下語法和部分:
constantname [ As datatype ] = initializer
constantname − 指定常量的名稱
datatype − 指定常量的數 據型別
initializer − 指定分配給常量的值
例如:
'The following statements declare constants.' Const maxval As Long = 4999 Public Const message As String = "HELLO" Private Const piValue As Double = 3.1415
示例
以下示例演示了常量值的宣告和使用:
Module constantsNenum
Sub Main()
Const PI = 3.14149
Dim radius, area As Single
radius = 7
area = PI * radius * radius
Console.WriteLine("Area = " & Str(area))
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Area = 153.933
在 VB.Net 中列印和顯示常量
VB.Net 提供以下列印和顯示常量:
| 序號 | 常量 & 說明 |
|---|---|
| 1 |
vbCrLf 回車/換行符組合。 |
| 2 |
vbCr 回車符。 |
| 3 | vbLf 換行符。 |
| 4 | vbNewLine 換行符。 |
| 5 | vbNullChar 空字元。 |
| 6 | vbNullString 與零長度字串("")不同;用於呼叫外部過程。 |
| 7 | vbObjectError 錯誤號。使用者定義的錯誤號應大於此值。例如:Err.Raise(Number) = vbObjectError + 1000 |
| 8 | vbTab 製表符。 |
| 9 | vbBack 退格符。 |
宣告列舉
列舉型別使用Enum語句宣告。Enum 語句宣告一個列舉並定義其成員的值。Enum 語句可以在模組、類、結構、過程或塊級別使用。
Enum 語句的語法如下:
[ < attributelist > ] [ accessmodifier ] [ Shadows ] Enum enumerationname [ As datatype ] memberlist End Enum
其中:
attributelist − 指的是應用於變數的屬性列表。可選。
accessmodifier − 指定哪些程式碼可以訪問這些列舉。可選。值可以是:Public、Protected、Friend 或 Private。
Shadows − 這使得列舉隱藏基類中相同名稱的程式設計元素。可選。
enumerationname − 列舉的名稱。必選
datatype − 指定列舉及其所有成員的資料型別。
memberlist − 指定在此語句中宣告的成員常量列表。必選。
memberlist 中的每個成員具有以下語法和部分
[< attribute list >] member name [ = initializer ]
其中:
name − 指定成員的名稱。必選。
initializer − 分配給列舉成員的值。可選。
例如:
Enum Colors red = 1 orange = 2 yellow = 3 green = 4 azure = 5 blue = 6 violet = 7 End Enum
示例
以下示例演示了 Enum 變數Colors的宣告和使用:
Module constantsNenum
Enum Colors
red = 1
orange = 2
yellow = 3
green = 4
azure = 5
blue = 6
violet = 7
End Enum
Sub Main()
Console.WriteLine("The Color Red is : " & Colors.red)
Console.WriteLine("The Color Yellow is : " & Colors.yellow)
Console.WriteLine("The Color Blue is : " & Colors.blue)
Console.WriteLine("The Color Green is : " & Colors.green)
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
The Color Red is: 1 The Color Yellow is: 3 The Color Blue is: 6 The Color Green is: 4
VB.Net - 修飾符
修飾符是在任何程式設計元素中新增的關鍵字,用於對程式設計元素的行為方式或在程式中的訪問方式進行一些特殊強調。
例如,訪問修飾符:Public、Private、Protected、Friend、Protected Friend 等,指示程式設計元素(如變數、常量、列舉或類)的訪問級別。
VB.Net 中可用的修飾符列表
下表提供了 VB.Net 修飾符的完整列表:
| 序號 | 修飾符 | 說明 |
|---|---|---|
| 1 | Ansi | 指定 Visual Basic 應將所有字串封送到美國國家標準學會 (ANSI) 值,而不管宣告的外部過程的名稱。 |
| 2 | Assembly | 指定原始檔開頭的屬性應用於整個程式集。 |
| 3 | Async | 指示它修改的方法或 lambda 表示式是非同步的。此類方法稱為非同步方法。非同步方法的呼叫者可以在等待非同步方法完成之前恢復其工作。 |
| 4 | Auto | Declare 語句中的charsetmodifier部分提供用於在呼叫外部過程期間封送字串的字元集資訊。它還會影響 Visual Basic 如何在外部檔案中搜索外部過程名稱。Auto 修飾符指定 Visual Basic 應根據 .NET Framework 規則封送字串。 |
| 5 | ByRef | 指定引數按引用傳遞,即被呼叫過程可以更改呼叫程式碼中引數下層變數的值。它在以下上下文中使用:
|
| 6 | ByVal | 指定引數以被呼叫過程或屬性無法更改呼叫程式碼中引數下層變數的值的方式傳遞。它在以下上下文中使用:
|
| 7 | Default | 將屬性標識為其類、結構或介面的預設屬性。 |
| 8 | Friend |
指定一個或多個宣告的程式設計元素可以從包含其宣告的程式集中訪問,而不僅僅是被宣告它們的元件。 Friend 訪問通常是應用程式程式設計元素的首選級別,Friend 是介面、模組、類或結構的預設訪問級別。 |
| 9 | In | 它用於泛型介面和委託。 |
| 10 | Iterator | 指定函式或 Get 訪問器是迭代器。迭代器對集合執行自定義迭代。 |
| 11 | Key | 使用 Key 關鍵字,可以指定匿名型別的屬性的行為。 |
| 12 | Module | 指定原始檔開頭的屬性應用於當前程式集模組。它與 Module 語句不同。 |
| 13 | MustInherit | 指定類只能用作基類,並且不能直接從中建立物件。 |
| 14 | MustOverride | 指定屬性或過程未在此類中實現,必須在派生類中重寫才能使用。 |
| 15 | Narrowing | 指示轉換運算子 (CType) 將類或結構轉換為可能無法容納原始類或結構某些可能值的型別。 |
| 16 | NotInheritable | 指定類不能用作基類。 |
| 17 | NotOverridable | 指定屬性或過程不能在派生類中重寫。 |
| 18 | Optional | 指定在呼叫過程時可以省略過程引數。 |
| 19 | Out | 對於泛型型別引數,Out 關鍵字指定型別是協變的。 |
| 20 | Overloads | 指定屬性或過程重新宣告一個或多個具有相同名稱的現有屬性或過程。 |
| 21 | Overridable | 指定屬性或過程可以被派生類中具有相同名稱的屬性或過程重寫。 |
| 22 | Overrides | 指定屬性或過程重寫從基類繼承的具有相同名稱的屬性或過程。 |
| 23 | ParamArray | ParamArray 允許您向過程傳遞任意數量的引數。ParamArray 引數始終使用 ByVal 宣告。 |
| 24 | Partial | 指示類或結構宣告是類或結構的部分定義。 |
| 25 | Private | 指定一個或多個宣告的程式設計元素只能從其宣告上下文內訪問,包括從任何包含的型別內訪問。 |
| 26 | Protected | 指定一個或多個宣告的程式設計元素只能從其自身類或派生類中訪問。 |
| 27 | Public | 指定一個或多個宣告的程式設計元素沒有訪問限制。 |
| 28 | ReadOnly | 指定變數或屬性可以讀取但不能寫入。 |
| 29 | Shadows | 指定宣告的程式設計元素重新宣告並隱藏基類中具有相同名稱的元素或一組過載元素。 |
| 30 | Shared | 指定一個或多個宣告的程式設計元素與類或結構整體相關聯,而不是與類的特定例項相關聯。 |
| 31 | Static | 指定一個或多個宣告的區域性變數將在宣告它們的程式終止後繼續存在並保留其最新值。 |
| 32 | Unicode | 指定 Visual Basic 應將所有字串封送到 Unicode 值,而不管宣告的外部過程的名稱。 |
| 33 | Widening | 指示轉換運算子 (CType) 將類或結構轉換為可以容納原始類或結構所有可能值的型別。 |
| 34 | WithEvents | 指定一個或多個宣告的成員變數引用可以引發事件的類的例項。 |
| 35 | WriteOnly | 指定屬性可以寫入但不能讀取。 |
VB.Net - 語句
語句是 Visual Basic 程式中的完整指令。它可能包含關鍵字、運算子、變數、字面值、常量和表示式。
語句可以分為:
宣告語句 − 這些是在其中命名變數、常量或過程的語句,還可以指定資料型別。
可執行語句 − 這些是啟動操作的語句。這些語句可以呼叫方法或函式,迴圈或分支透過程式碼塊,或將值或表示式賦值給變數或常量。在最後一種情況下,它被稱為賦值語句。
宣告語句
宣告語句用於命名和定義過程、變數、屬性、陣列和常量。宣告程式設計元素時,還可以定義其資料型別、訪問級別和作用域。
您可以宣告的程式設計元素包括變數、常量、列舉、類、結構、模組、介面、過程、過程引數、函式返回值、外部過程引用、運算子、屬性、事件和委託。
以下是 VB.Net 中的宣告語句:
| 序號 | 語句和說明 | 示例 |
|---|---|---|
| 1 |
Dim 語句 宣告並分配一個或多個變數的儲存空間。 |
Dim number As Integer Dim quantity As Integer = 100 Dim message As String = "Hello!" |
| 2 |
Const 語句 宣告並定義一個或多個常量。 |
Const maximum As Long = 1000 Const naturalLogBase As Object = CDec(2.7182818284) |
| 3 |
Enum 語句 宣告一個列舉並定義其成員的值。 |
Enum CoffeeMugSize Jumbo ExtraLarge Large Medium Small End Enum |
| 4 |
Class 語句 宣告類的名稱,並介紹類包含的變數、屬性、事件和過程的定義。 |
Class Box Public length As Double Public breadth As Double Public height As Double End Class |
| 5 |
Structure 語句 宣告結構的名稱,並介紹結構包含的變數、屬性、事件和過程的定義。 |
Structure Box Public length As Double Public breadth As Double Public height As Double End Structure |
| 6 |
Module 語句 宣告模組的名稱,並介紹模組包含的變數、屬性、事件和過程的定義。 |
Public Module myModule
Sub Main()
Dim user As String =
InputBox("What is your name?")
MsgBox("User name is" & user)
End Sub
End Module
|
| 7 |
Interface 語句 宣告介面的名稱,並介紹介面包含的成員的定義。 |
Public Interface MyInterface Sub doSomething() End Interface |
| 8 |
Function 語句 宣告定義函式過程的名稱、引數和程式碼。 |
Function myFunction (ByVal n As Integer) As Double Return 5.87 * n End Function |
| 9 |
Sub 語句 宣告定義 Sub 過程的名稱、引數和程式碼。 |
Sub mySub(ByVal s As String) Return End Sub |
| 10 |
Declare 語句 宣告對在外部檔案中實現的過程的引用。 |
Declare Function getUserName Lib "advapi32.dll" Alias "GetUserNameA" ( ByVal lpBuffer As String, ByRef nSize As Integer) As Integer |
| 11 |
Operator 語句 宣告定義類或結構上的運算子過程的運算子符號、運算元和程式碼。 |
Public Shared Operator + (ByVal x As obj, ByVal y As obj) As obj Dim r As New obj ' implemention code for r = x + y Return r End Operator |
| 12 |
Property 語句 宣告屬性的名稱以及用於儲存和檢索屬性值的屬性過程。 |
ReadOnly Property quote() As String
Get
Return quoteString
End Get
End Property
|
| 13 |
Event 語句 宣告使用者定義的事件。 |
Public Event Finished() |
| 14 |
Delegate 語句 用於宣告委託。 |
Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double |
可執行語句
可執行語句執行操作。呼叫過程、分支到程式碼中的其他位置、迴圈遍歷多個語句或計算表示式的語句都是可執行語句。賦值語句是可執行語句的特例。
示例
以下示例演示了決策語句:
Module decisions
Sub Main()
'local variable definition '
Dim a As Integer = 10
' check the boolean condition using if statement '
If (a < 20) Then
' if condition is true then print the following '
Console.WriteLine("a is less than 20")
End If
Console.WriteLine("value of a is : {0}", a)
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
a is less than 20; value of a is : 10
VB.Net - 指令
VB.Net 編譯器指令指示編譯器在實際編譯開始之前預處理資訊。所有這些指令都以 # 開頭,一行指令前只能出現空格字元。這些指令不是語句。
VB.Net 編譯器沒有單獨的預處理器;但是,這些指令的處理方式就好像有一個預處理器一樣。在 VB.Net 中,編譯器指令用於幫助進行條件編譯。與 C 和 C++ 指令不同,它們不用於建立宏。
VB.Net 中的編譯器指令
VB.Net 提供以下編譯器指令集:
#Const 指令
#ExternalSource 指令
#If...Then...#Else 指令
#Region 指令
#Const 指令
此指令定義條件編譯常量。此指令的語法如下:
#Const constname = expression
其中:
constname − 指定常量的名稱。必需。
expression − 它可以是字面量,也可以是其他條件編譯常量,或者包括任何或所有算術或邏輯運算子(除 Is 外)的組合。
例如:
#Const state = "WEST BENGAL"
示例
以下程式碼演示了該指令的假設用法:
Module mydirectives
#Const age = True
Sub Main()
#If age Then
Console.WriteLine("You are welcome to the Robotics Club")
#End If
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
You are welcome to the Robotics Club
#ExternalSource 指令
此指令用於指示原始碼特定行與原始碼外部文字之間的對映。它僅由編譯器使用,偵錯程式對程式碼編譯沒有影響。
此指令用於將來自外部程式碼檔案的外部程式碼包含到原始碼檔案中。
此指令的語法如下:
#ExternalSource( StringLiteral , IntLiteral ) [ LogicalLine ] #End ExternalSource
#ExternalSource 指令的引數是外部檔案的路徑、第一行的行號以及發生錯誤的行。
示例
以下程式碼演示了該指令的假設用法:
Module mydirectives
Public Class ExternalSourceTester
Sub TestExternalSource()
#ExternalSource("c:\vbprogs\directives.vb", 5)
Console.WriteLine("This is External Code. ")
#End ExternalSource
End Sub
End Class
Sub Main()
Dim t As New ExternalSourceTester()
t.TestExternalSource()
Console.WriteLine("In Main.")
Console.ReadKey()
End Sub
當上述程式碼編譯並執行時,它會產生以下結果:
This is External Code. In Main.
#If...Then...#Else 指令
此指令有條件地編譯選定的 Visual Basic 程式碼塊。
此指令的語法如下:
#If expression Then statements [ #ElseIf expression Then [ statements ] ... #ElseIf expression Then [ statements ] ] [ #Else [ statements ] ] #End If
例如:
#Const TargetOS = "Linux" #If TargetOS = "Windows 7" Then ' Windows 7 specific code #ElseIf TargetOS = "WinXP" Then ' Windows XP specific code #Else ' Code for other OS #End if
示例
以下程式碼演示了該指令的假設用法:
Module mydirectives
#Const classCode = 8
Sub Main()
#If classCode = 7 Then
Console.WriteLine("Exam Questions for Class VII")
#ElseIf classCode = 8 Then
Console.WriteLine("Exam Questions for Class VIII")
#Else
Console.WriteLine("Exam Questions for Higher Classes")
#End If
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Exam Questions for Class VIII
#Region 指令
此指令有助於摺疊和隱藏 Visual Basic 檔案中的程式碼部分。
此指令的語法如下:
#Region "identifier_string" #End Region
例如:
#Region "StatsFunctions" ' Insert code for the Statistical functions here. #End Region
VB.Net - 運算子
運算子是告訴編譯器執行特定數學或邏輯操作的符號。VB.Net 運算子豐富,並提供以下型別的常用運算子:
算術運算子
比較運算子
邏輯/按位運算子
位移運算子
賦值運算子
其他運算子
本教程將解釋最常用的運算子。
算術運算子
下表顯示了 VB.Net 支援的所有算術運算子。假設變數 A 為 2,變數 B 為 7,則:
| 運算子 | 說明 | 示例 |
|---|---|---|
| ^ | 將一個運算元提升到另一個運算元的冪 | B^A 將得到 49 |
| + | 將兩個運算元相加 | A + B 將得到 9 |
| - | 從第一個運算元中減去第二個運算元 | A - B 將得到 -5 |
| * | 將兩個運算元相乘 | A * B 將得到 14 |
| / | 將一個運算元除以另一個運算元並返回浮點結果 | B / A 將得到 3.5 |
| \ | 將一個運算元除以另一個運算元並返回整數結果 | B \ A 將得到 3 |
| MOD | 模運算子和整數除法後的餘數 | B MOD A 將得到 1 |
比較運算子
下表顯示了 VB.Net 支援的所有比較運算子。假設變數 A 為 10,變數 B 為 20,則:
| 運算子 | 說明 | 示例 |
|---|---|---|
| = | 檢查兩個運算元的值是否相等;如果相等,則條件為真。 | (A = B) 為假。 |
| <> | 檢查兩個運算元的值是否相等;如果不相等,則條件為真。 | (A <> B) 為真。 |
| > | 檢查左側運算元的值是否大於右側運算元的值;如果是,則條件為真。 | (A > B) 為假。 |
| < | 檢查左側運算元的值是否小於右側運算元的值;如果是,則條件為真。 | (A < B) 為真。 |
| >= | 檢查左側運算元的值是否大於或等於右側運算元的值;如果是,則條件為真。 | (A >= B) 為假。 |
| <= | 檢查左側運算元的值是否小於或等於右側運算元的值;如果是,則條件為真。 | (A <= B) 為真。 |
除了上述內容外,VB.Net 還提供了三個比較運算子,我們將在接下來的章節中使用它們;但是,我們在此簡要介紹一下。
Is 運算子 − 它比較兩個物件引用變數,並確定兩個物件引用是否引用同一個物件,而無需執行值比較。如果 object1 和 object2 都引用完全相同的物件例項,則結果為 True;否則,結果為 False。
IsNot 運算子 − 它也比較兩個物件引用變數,並確定兩個物件引用是否引用不同的物件。如果 object1 和 object2 都引用完全相同的物件例項,則結果為 False;否則,結果為 True。
Like 運算子 − 它將字串與模式進行比較。
邏輯/按位運算子
下表顯示了 VB.Net 支援的所有邏輯運算子。假設變數 A 為布林值 True,變數 B 為布林值 False,則:
| 運算子 | 說明 | 示例 |
|---|---|---|
| And | 它是邏輯和按位 AND 運算子。如果兩個運算元都為真,則條件為真。此運算子不執行短路,即它會計算兩個表示式。 | (A And B) 為假。 |
| Or | 它是邏輯和按位 OR 運算子。如果兩個運算元中的任何一個為真,則條件為真。此運算子不執行短路,即它會計算兩個表示式。 | (A Or B) 為真。 |
| Not | 它是邏輯和按位 NOT 運算子。用於反轉其運算元的邏輯狀態。如果條件為真,則邏輯 NOT 運算子將變為假。 | Not(A And B) 為真。 |
| Xor | 它是邏輯和按位異或運算子。如果兩個表示式都為真或都為假,則返回 True;否則返回 False。此運算子不執行短路,它始終計算兩個表示式,並且此運算子沒有短路對應項。 | A Xor B 為真。 |
| AndAlso | 它是邏輯 AND 運算子。它只對布林資料起作用。它執行短路。 | (A AndAlso B) 為假。 |
| OrElse | 它是邏輯 OR 運算子。它只對布林資料起作用。它執行短路。 | (A OrElse B) 為真。 |
| IsFalse | 它確定表示式是否為 False。 | |
| IsTrue | 它確定表示式是否為 True。 |
位移運算子
我們已經討論了按位運算子。位移運算子對二進位制值執行移位操作。在進入位移運算子之前,讓我們瞭解一下位操作。
按位運算子作用於位並執行逐位操作。&,| 和 ^ 的真值表如下:
| p | q | p & q | p | q | p ^ q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
假設 A = 60;B = 13;現在以二進位制格式,它們將如下所示:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
我們已經看到 VB.Net 支援的按位運算子是 And、Or、Xor 和 Not。位移運算子分別是 >> 和 <<,分別用於左移和右移。
假設變數 A 為 60,變數 B 為 13,則:
| 運算子 | 說明 | 示例 |
|---|---|---|
| And | 按位 AND 運算子複製如果存在於兩個運算元中的位到結果中。 | (A AND B) 將得到 12,即 0000 1100 |
| Or | 二進位制 OR 運算子複製如果存在於任何一個運算元中的位。 | (A Or B) 將得到 61,即 0011 1101 |
| Xor | 二進位制 XOR 運算子複製如果在一個運算元中設定但在兩個運算元中都不設定的位。 | (A Xor B) 將得到 49,即 0011 0001 |
| Not | 二進位制反碼運算子是一元的,具有“翻轉”位的效果。 | (Not A) 將得到 -61,由於是帶符號的二進位制數,因此以二進位制補碼形式表示為 1100 0011。 |
| << | 二進位制左移運算子。左運算元的值向左移動由右運算元指定的位數。 | A << 2 將得到 240,即 1111 0000 |
| >> | 二進位制右移運算子。左運算元的值向右移動由右運算元指定的位數。 | A >> 2 將得到 15,即 0000 1111 |
賦值運算子
VB.Net支援以下賦值運算子:
| 運算子 | 說明 | 示例 |
|---|---|---|
| = | 簡單賦值運算子,將右側運算元的值賦給左側運算元 | C = A + B 將 A + B 的值賦給 C |
| += | 加法賦值運算子,它將右側運算元新增到左側運算元,並將結果賦給左側運算元 | C += A 等效於 C = C + A |
| -= | 減法賦值運算子,它將右側運算元從左側運算元中減去,並將結果賦給左側運算元 | C -= A 等效於 C = C - A |
| *= | 乘法賦值運算子,它將右側運算元與左側運算元相乘,並將結果賦給左側運算元 | C *= A 等效於 C = C * A |
| /= | 浮點除法賦值運算子,它將左側運算元除以右側運算元,並將結果賦給左側運算元(浮點除法) | C /= A 等效於 C = C / A |
| \= | 整數除法賦值運算子,它將左側運算元除以右側運算元,並將結果賦給左側運算元(整數除法) | C \= A 等效於 C = C \ A |
| ^= | 指數賦值運算子,它將左側運算元乘以右側運算元的冪,並將結果賦給左側運算元。 | C ^= A 等效於 C = C ^ A |
| <<= | 左移賦值運算子 | C <<= 2 等同於 C = C << 2 |
| >>= | 右移賦值運算子 | C >>= 2 等同於 C = C >> 2 |
| &= | 將字串表示式連線到字串變數或屬性,並將結果賦給變數或屬性。 | Str1 &= Str2 等同於 Str1 = Str1 & Str2 |
其他運算子
VB.Net還支援一些其他重要的運算子。
| 運算子 | 說明 | 示例 |
|---|---|---|
| AddressOf | 返回過程的地址。 |
AddHandler Button1.Click, AddressOf Button1_Click |
| Await | 它應用於非同步方法或lambda表示式中的運算元,以掛起方法的執行,直到等待的任務完成。 |
Dim result As res = Await AsyncMethodThatReturnsResult() Await AsyncMethod() |
| GetType | 它為指定的型別返回一個Type物件。Type物件提供有關型別的的資訊,例如其屬性、方法和事件。 |
MsgBox(GetType(Integer).ToString()) |
| 函式表示式 | 它宣告定義函式lambda表示式的引數和程式碼。 |
Dim add5 = Function(num As Integer) num + 5 'prints 10 Console.WriteLine(add5(5)) |
| If | 它使用短路求值來有條件地返回兩個值中的一個。If運算子可以用三個引數或兩個引數呼叫。 |
Dim num = 5 Console.WriteLine(If(num >= 0, "Positive", "Negative")) |
VB.Net中的運算子優先順序
運算子優先順序決定表示式中項的分組方式。這會影響表示式的求值方式。某些運算子的優先順序高於其他運算子;例如,乘法運算子的優先順序高於加法運算子:
例如,x = 7 + 3 * 2;這裡,x被賦值為13,而不是20,因為運算子*的優先順序高於+,所以它首先與3*2相乘,然後加到7中。
表中列出了優先順序最高的運算子位於頂部,優先順序最低的運算子位於底部。在表示式中,將首先計算優先順序較高的運算子。
| 運算子 | 優先順序 |
|---|---|
| Await | 最高 |
| 指數運算 (^) | |
| 一元標識和否定 (+, -) | |
| 乘法和浮點除法 (*, /) | |
| 整數除法 (\) | |
| 模運算 (Mod) | |
| 加法和減法 (+, -) | |
| 算術位移 (<<, >>) | |
| 所有比較運算子 (=, <>, <, <=, >, >=, Is, IsNot, Like, TypeOf...Is) | |
| 否定 (Not) | |
| 連線 (And, AndAlso) | |
| 包含性析取 (Or, OrElse) | |
| 排他性析取 (Xor) | 最低 |
VB.Net - 決策
決策結構要求程式設計師指定一個或多個條件供程式評估或測試,以及在確定條件為真時要執行的語句(或語句組),以及可選地在確定條件為假時要執行的其他語句。
以下是大多數程式語言中典型的決策結構的通用形式:
VB.Net提供以下型別的決策語句。點選以下連結檢視詳細資訊。
| 語句 | 說明 |
|---|---|
If...Then語句由一個布林表示式和一個或多個語句組成。 |
|
If...Then語句後面可以跟一個可選的Else語句,當布林表示式為假時執行。 |
|
| 你可以在另一個If或Else if語句內使用一個If或Else if語句。 | |
Select Case語句允許測試變數與值列表的相等性。 |
|
你可以在另一個select case語句內使用一個select case語句。 |
VB.Net - 迴圈
可能需要多次執行一段程式碼的情況。通常情況下,語句是順序執行的:函式中的第一個語句先執行,然後是第二個語句,依此類推。
程式語言提供各種控制結構,允許更復雜的執行路徑。
迴圈語句允許我們多次執行一個語句或一組語句,以下是大多數程式語言中迴圈語句的通用形式:
VB.Net提供以下型別的迴圈來處理迴圈需求。點選以下連結檢視詳細資訊。
| 迴圈型別 | 說明 |
|---|---|
當布林條件為 True 或直到條件變為 True 時,它重複封閉的語句塊。它可以用 Exit Do 語句隨時終止。 |
|
它重複指定次數的一組語句,並且迴圈索引在迴圈執行時計算迴圈迭代的次數。 |
|
| 它對集合中的每個元素重複一組語句。此迴圈用於訪問和運算元組或 VB.Net 集合中的所有元素。 | |
只要給定的條件為 True,它就會執行一系列語句。 |
|
它並非嚴格意義上的迴圈結構。它執行一系列重複引用單個物件或結構的語句。 |
|
你可以在任何其他 While、For 或 Do 迴圈中使用一個或多個迴圈。 |
迴圈控制語句
迴圈控制語句會改變執行的正常順序。當執行離開作用域時,在該作用域中建立的所有自動物件都會被銷燬。
VB.Net 提供以下控制語句。點選以下連結檢視詳細資訊。
| 控制語句 | 說明 |
|---|---|
終止迴圈或select case語句,並將執行轉移到迴圈或select case之後的語句。 |
|
導致迴圈跳過其主體其餘部分,並在重新迭代之前立即重新測試其條件。 |
|
將控制轉移到帶標籤的語句。雖然不建議在程式中使用 GoTo 語句。 |
VB.Net - 字串
在 VB.Net 中,您可以使用字串作為字元陣列,但是更常見的做法是使用 String 關鍵字宣告字串變數。String 關鍵字是System.String類的別名。
建立字串物件
您可以使用以下方法之一建立字串物件:
將字串文字賦值給 String 變數
使用 String 類建構函式
使用字串連線運算子 (+)
檢索返回字串的屬性或呼叫方法
呼叫格式化方法將值或物件轉換為其字串表示形式
以下示例演示了這一點:
Module strings
Sub Main()
Dim fname, lname, fullname, greetings As String
fname = "Rowan"
lname = "Atkinson"
fullname = fname + " " + lname
Console.WriteLine("Full Name: {0}", fullname)
'by using string constructor
Dim letters As Char() = {"H", "e", "l", "l", "o"}
greetings = New String(letters)
Console.WriteLine("Greetings: {0}", greetings)
'methods returning String
Dim sarray() As String = {"Hello", "From", "Tutorials", "Point"}
Dim message As String = String.Join(" ", sarray)
Console.WriteLine("Message: {0}", message)
'formatting method to convert a value
Dim waiting As DateTime = New DateTime(2012, 12, 12, 17, 58, 1)
Dim chat As String = String.Format("Message sent at {0:t} on {0:D}", waiting)
Console.WriteLine("Message: {0}", chat)
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Full Name: Rowan Atkinson Greetings: Hello Message: Hello From Tutorials Point Message: Message sent at 5:58 PM on Wednesday, December 12, 2012
String 類的屬性
String 類具有以下兩個屬性:
| 序號 | 屬性名稱和描述 |
|---|---|
| 1 |
Chars 獲取當前String物件中指定位置的Char物件。 |
| 2 |
Length 獲取當前 String 物件中的字元數。 |
String 類的使用方法
String 類有許多方法可以幫助您處理字串物件。下表提供了一些最常用的方法:
| 序號 | 方法名稱和描述 |
|---|---|
| 1 |
Public Shared Function Compare (strA As String, strB As String) As Integer 比較兩個指定的字串物件,並返回一個整數,該整數指示它們在排序順序中的相對位置。 |
| 2 |
Public Shared Function Compare (strA As String, strB As String, ignoreCase As Boolean) As Integer 比較兩個指定的字串物件,並返回一個整數,該整數指示它們在排序順序中的相對位置。但是,如果布林引數為 true,則忽略大小寫。 |
| 3 |
Public Shared Function Concat (str0 As String, str1 As String) As String 連線兩個字串物件。 |
| 4 |
Public Shared Function Concat (str0 As String, str1 As String, str2 As String) As String 連線三個字串物件。 |
| 5 |
Public Shared Function Concat (str0 As String, str1 As String, str2 As String, str3 As String) As String 連線四個字串物件。 |
| 6 |
Public Function Contains (value As String) As Boolean 返回一個值,該值指示指定的字串物件是否出現在此字串中。 |
| 7 |
Public Shared Function Copy (str As String) As String 建立一個新的 String 物件,其值與指定的字串相同。 |
| 8 |
Public Sub CopyTo (sourceIndex As Integer, destination As Char(), destinationIndex As Integer, count As Integer) 將指定數量的字元從字串物件的指定位置複製到 Unicode 字元陣列的指定位置。 |
| 9 |
Public Function EndsWith (value As String) As Boolean 確定字串物件的結尾是否與指定的字串匹配。 |
| 10 |
Public Function Equals (value As String) As Boolean 確定當前字串物件和指定的字串物件是否具有相同的值。 |
| 11 |
Public Shared Function Equals (a As String, b As String) As Boolean 確定兩個指定的字串物件是否具有相同的值。 |
| 12 |
Public Shared Function Format (format As String, arg0 As Object) As String 用指定物件的字串表示形式替換指定字串中一個或多個格式項。 |
| 13 |
Public Function IndexOf (value As Char) As Integer 返回當前字串中指定 Unicode 字元第一次出現的基於零的索引。 |
| 14 |
Public Function IndexOf (value As String) As Integer 返回此例項中指定字串第一次出現的基於零的索引。 |
| 15 |
Public Function IndexOf (value As Char, startIndex As Integer) As Integer 返回此字串中指定 Unicode 字元第一次出現的基於零的索引,從指定的字元位置開始搜尋。 |
| 16 |
Public Function IndexOf (value As String, startIndex As Integer) As Integer 返回此例項中指定字串第一次出現的基於零的索引,從指定的字元位置開始搜尋。 |
| 17 |
Public Function IndexOfAny (anyOf As Char()) As Integer 返回在此例項中指定的 Unicode 字元陣列中任何字元的第一次出現的零索引位置。 |
| 18 |
Public Function IndexOfAny (anyOf As Char(), startIndex As Integer) As Integer 返回在此例項中指定的 Unicode 字元陣列中任何字元的第一次出現的零索引位置,從指定的字元位置開始搜尋。 |
| 19 |
Public Function Insert (startIndex As Integer, value As String) As String 返回一個新的字串,其中在當前字串物件的指定索引位置插入指定的字串。 |
| 20 |
Public Shared Function IsNullOrEmpty (value As String) As Boolean 指示指定的字串是否為 null 或空字串。 |
| 21 |
Public Shared Function Join (separator As String, ParamArray value As String()) As String 使用指定的隔板連線字串陣列的所有元素。 |
| 22 |
Public Shared Function Join (separator As String, value As String(), startIndex As Integer, count As Integer) As String 使用指定的隔板連線字串陣列的指定元素。 |
| 23 |
Public Function LastIndexOf (value As Char) As Integer 返回當前字串物件中指定 Unicode 字元最後一次出現的零索引位置。 |
| 24 |
Public Function LastIndexOf (value As String) As Integer 返回當前字串物件中指定字串最後一次出現的零索引位置。 |
| 25 |
Public Function Remove (startIndex As Integer) As String 移除當前例項中從指定位置開始到最後位置的所有字元,並返回字串。 |
| 26 |
Public Function Remove (startIndex As Integer, count As Integer) As String 從指定位置開始移除當前字串中的指定數量的字元,並返回字串。 |
| 27 |
Public Function Replace (oldChar As Char, newChar As Char) As String 將當前字串物件中所有出現的指定 Unicode 字元替換為指定的 Unicode 字元,並返回新字串。 |
| 28 |
Public Function Replace (oldValue As String, newValue As String) As String 將當前字串物件中所有出現的指定字串替換為指定的字串,並返回新字串。 |
| 29 |
Public Function Split (ParamArray separator As Char()) As String() 返回一個字串陣列,其中包含當前字串物件中的子字串,這些子字串由指定 Unicode 字元陣列的元素分隔。 |
| 30 |
Public Function Split (separator As Char(), count As Integer) As String() 返回一個字串陣列,其中包含當前字串物件中的子字串,這些子字串由指定 Unicode 字元陣列的元素分隔。int 引數指定要返回的最大子字串數。 |
| 31 |
Public Function StartsWith (value As String) As Boolean 確定此字串例項的開頭是否與指定的字串匹配。 |
| 32 |
Public Function ToCharArray As Char() 返回包含當前字串物件中所有字元的 Unicode 字元陣列。 |
| 33 |
Public Function ToCharArray (startIndex As Integer, length As Integer) As Char() 返回包含當前字串物件中所有字元的 Unicode 字元陣列,從指定的索引開始,直到指定的長度。 |
| 34 |
Public Function ToLower As String 返回轉換為小寫的此字串的副本。 |
| 35 |
Public Function ToUpper As String 返回轉換為大寫的此字串的副本。 |
| 36 |
Public Function Trim As String 移除當前 String 物件中所有前導和尾隨的空格字元。 |
以上方法列表並不完整,請訪問 MSDN 庫檢視完整的方法和 String 類建構函式列表。
示例
以下示例演示了上面提到的一些方法:
字串比較
Module strings
Sub Main()
Dim str1, str2 As String
str1 = "This is test"
str2 = "This is text"
If (String.Compare(str1, str2) = 0) Then
Console.WriteLine(str1 + " and " + str2 + " are equal.")
Else
Console.WriteLine(str1 + " and " + str2 + " are not equal.")
End If
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
This is test and This is text are not equal.
字串包含字串
Module strings
Sub Main()
Dim str1 As String
str1 = "This is test"
If (str1.Contains("test")) Then
Console.WriteLine("The sequence 'test' was found.")
End If
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
The sequence 'test' was found.
獲取子字串
Module strings
Sub Main()
Dim str As String
str = "Last night I dreamt of San Pedro"
Console.WriteLine(str)
Dim substr As String = str.Substring(23)
Console.WriteLine(substr)
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Last night I dreamt of San Pedro San Pedro.
連線字串
Module strings
Sub Main()
Dim strarray As String() = {
"Down the way where the nights are gay",
"And the sun shines daily on the mountain top",
"I took a trip on a sailing ship",
"And when I reached Jamaica",
"I made a stop"
}
Dim str As String = String.Join(vbCrLf, strarray)
Console.WriteLine(str)
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Down the way where the nights are gay And the sun shines daily on the mountain top I took a trip on a sailing ship And when I reached Jamaica I made a stop
VB.Net - 日期和時間
您編寫的許多軟體都需要實現某種形式的日期函式,以返回當前日期和時間。日期在日常生活中如此普遍,以至於在不經思考的情況下就可以輕鬆地使用它們。VB.Net 還提供了強大的日期運算工具,使日期操作變得容易。
**Date** 資料型別包含日期值、時間值或日期和時間值。Date 的預設值為 0001 年 1 月 1 日的午夜 (0:00:00)。等效的 .NET 資料型別為 **System.DateTime**。
**DateTime** 結構表示時間中的一個瞬間,通常表示為日期和時間。
'Declaration <SerializableAttribute> _ Public Structure DateTime _ Implements IComparable, IFormattable, IConvertible, ISerializable, IComparable(Of DateTime), IEquatable(Of DateTime)
您還可以從 DateAndTime 類獲取當前日期和時間。
**DateAndTime** 模組包含在日期和時間操作中使用的過程和屬性。
'Declaration <StandardModuleAttribute> _ Public NotInheritable Class DateAndTime
|
注意 DateTime 結構和 DateAndTime 模組都包含 **Now** 和 **Today** 等屬性,因此初學者經常會感到困惑。DateAndTime 類屬於 Microsoft.VisualBasic 名稱空間,而 DateTime 結構屬於 System 名稱空間。 |
DateTime 結構的屬性和方法
下表列出了 **DateTime** 結構的一些常用**屬性**:
| 序號 | Property | 說明 |
|---|---|---|
| 1 | Date | 獲取此例項的日期組成部分。 |
| 2 | Day | 獲取此例項表示的月份中的日期。 |
| 3 | DayOfWeek | 獲取此例項表示的星期幾。 |
| 4 | DayOfYear | 獲取此例項表示的年中的一天。 |
| 5 | Hour | 獲取此例項表示的日期的小時組成部分。 |
| 6 | Kind | 獲取一個值,該值指示此例項表示的時間是基於本地時間、協調世界時 (UTC) 還是兩者都不是。 |
| 7 | Millisecond | 獲取此例項表示的日期的毫秒組成部分。 |
| 8 | Minute | 獲取此例項表示的日期的分鐘組成部分。 |
| 9 | Month | 獲取此例項表示的日期的月份組成部分。 |
| 10 | Now | 獲取一個 **DateTime** 物件,該物件設定為這臺計算機上的當前日期和時間,表示為本地時間。 |
| 11 | Second | 獲取此例項表示的日期的秒組成部分。 |
| 12 | Ticks | 獲取表示此例項的日期和時間的刻度數。 |
| 13 | TimeOfDay | 獲取此例項的一天中的時間。 |
| 14 | Today | 獲取當前日期。 |
| 15 | UtcNow | 獲取一個 **DateTime** 物件,該物件設定為這臺計算機上的當前日期和時間,表示為協調世界時 (UTC)。 |
| 16 | Year | 獲取此例項表示的日期的年份組成部分。 |
下表列出了 **DateTime** 結構的一些常用**方法**:
| 序號 | 方法名稱和描述 |
|---|---|
| 1 |
Public Function Add (value As TimeSpan) As DateTime 返回一個新的 DateTime,它將指定 TimeSpan 的值新增到此例項的值。 |
| 2 |
Public Function AddDays (value As Double) As DateTime 返回一個新的 DateTime,它將指定的天數新增到此例項的值。 |
| 3 |
Public Function AddHours (value As Double) As DateTime 返回一個新的 DateTime,它將指定的小時數新增到此例項的值。 |
| 4 |
Public Function AddMinutes (value As Double) As DateTime 返回一個新的 DateTime,它將指定的分鐘數新增到此例項的值。 |
| 5 |
Public Function AddMonths (months As Integer) As DateTime 返回一個新的 DateTime,它將指定的月份數新增到此例項的值。 |
| 6 |
Public Function AddSeconds (value As Double) As DateTime 返回一個新的 DateTime,它將指定的秒數新增到此例項的值。 |
| 7 |
Public Function AddYears (value As Integer) As DateTime 返回一個新的 DateTime,它將指定的年份數新增到此例項的值。 |
| 8 |
Public Shared Function Compare (t1 As DateTime, t2 As DateTime) As Integer 比較兩個 DateTime 例項,並返回一個整數,該整數指示第一個例項是否早於、等於或晚於第二個例項。 |
| 9 |
Public Function CompareTo (value As DateTime) As Integer 將此例項的值與指定的 DateTime 值進行比較,並返回一個整數,該整數指示此例項是否早於、等於或晚於指定的 DateTime 值。 |
| 10 |
Public Function Equals (value As DateTime) As Boolean 返回一個值,該值指示此例項的值是否等於指定的 DateTime 例項的值。 |
| 11 |
Public Shared Function Equals (t1 As DateTime, t2 As DateTime) As Boolean 返回一個值,該值指示兩個 DateTime 例項是否具有相同的日期和時間值。 |
| 12 |
Public Overrides Function ToString As String 將當前 DateTime 物件的值轉換為其等效的字串表示形式。 |
以上方法列表並不完整,請訪問 Microsoft 文件 檢視 DateTime 結構的完整方法和屬性列表。
建立 DateTime 物件
您可以透過以下方式之一建立 DateTime 物件:
從任何過載的 DateTime 建構函式呼叫 DateTime 建構函式。
將 DateTime 物件分配給由屬性或方法返回的日期和時間值。
分析日期和時間值的字串表示形式。
呼叫 DateTime 結構的隱式預設建構函式。
以下示例演示了這一點:
Module Module1
Sub Main()
'DateTime constructor: parameters year, month, day, hour, min, sec
Dim date1 As New Date(2012, 12, 16, 12, 0, 0)
'initializes a new DateTime value
Dim date2 As Date = #12/16/2012 12:00:52 AM#
'using properties
Dim date3 As Date = Date.Now
Dim date4 As Date = Date.UtcNow
Dim date5 As Date = Date.Today
Console.WriteLine(date1)
Console.WriteLine(date2)
Console.WriteLine(date3)
Console.WriteLine(date4)
Console.WriteLine(date5)
Console.ReadKey()
End Sub
End Module
編譯並執行上述程式碼後,會產生以下結果:
12/16/2012 12:00:00 PM 12/16/2012 12:00:52 PM 12/12/2012 10:22:50 PM 12/12/2012 12:00:00 PM
獲取當前日期和時間
以下程式演示如何在 VB.Net 中獲取當前日期和時間:
當前時間:
Module dateNtime
Sub Main()
Console.Write("Current Time: ")
Console.WriteLine(Now.ToLongTimeString)
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Current Time: 11 :05 :32 AM
當前日期:
Module dateNtime
Sub Main()
Console.WriteLine("Current Date: ")
Dim dt As Date = Today
Console.WriteLine("Today is: {0}", dt)
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Today is: 12/11/2012 12:00:00 AM
日期格式化
日期文字應括在井號 (# #) 中,並以 M/d/yyyy 格式指定,例如 #12/16/2012#。否則,您的程式碼可能會根據執行應用程式的區域設定而變化。
例如,您為 2012 年 2 月 6 日指定了日期文字 #2/6/2012#。對於使用 mm/dd/yyyy 格式的區域設定來說是可以的。但是,在使用 dd/mm/yyyy 格式的區域設定中,您的文字將編譯為 2012 年 6 月 2 日。如果區域設定使用其他格式,例如 yyyy/mm/dd,則文字將無效並導致編譯器錯誤。
要將日期文字轉換為您的區域設定的格式或自定義格式,請使用 String 類的 **Format** 函式,指定預定義或使用者定義的日期格式。
以下示例演示了這一點。
Module dateNtime
Sub Main()
Console.WriteLine("India Wins Freedom: ")
Dim independenceDay As New Date(1947, 8, 15, 0, 0, 0)
' Use format specifiers to control the date display.
Console.WriteLine(" Format 'd:' " & independenceDay.ToString("d"))
Console.WriteLine(" Format 'D:' " & independenceDay.ToString("D"))
Console.WriteLine(" Format 't:' " & independenceDay.ToString("t"))
Console.WriteLine(" Format 'T:' " & independenceDay.ToString("T"))
Console.WriteLine(" Format 'f:' " & independenceDay.ToString("f"))
Console.WriteLine(" Format 'F:' " & independenceDay.ToString("F"))
Console.WriteLine(" Format 'g:' " & independenceDay.ToString("g"))
Console.WriteLine(" Format 'G:' " & independenceDay.ToString("G"))
Console.WriteLine(" Format 'M:' " & independenceDay.ToString("M"))
Console.WriteLine(" Format 'R:' " & independenceDay.ToString("R"))
Console.WriteLine(" Format 'y:' " & independenceDay.ToString("y"))
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
India Wins Freedom: Format 'd:' 8/15/1947 Format 'D:' Friday, August 15, 1947 Format 't:' 12:00 AM Format 'T:' 12:00:00 AM Format 'f:' Friday, August 15, 1947 12:00 AM Format 'F:' Friday, August 15, 1947 12:00:00 AM Format 'g:' 8/15/1947 12:00 AM Format 'G:' 8/15/1947 12:00:00 AM Format 'M:' 8/15/1947 August 15 Format 'R:' Fri, 15 August 1947 00:00:00 GMT Format 'y:' August, 1947
預定義的日期/時間格式
下表標識了預定義的日期和時間格式名稱。這些名稱可以用作 **Format** 函式的 style 引數:
| 格式 | 說明 |
|---|---|
| 通用日期或 G | 顯示日期和/或時間。例如,1/12/2012 07:07:30 AM。 |
| 長日期、中日期或 D | 根據您當前文化的長日期格式顯示日期。例如,星期日,2012 年 12 月 16 日。 |
| 短日期或 d | 使用您當前文化的短日期格式顯示日期。例如,12/12/2012。 |
| 長時間、中時間或 T | 使用您當前文化的長時間格式顯示時間;通常包括小時、分鐘、秒。例如,上午 01:07:30。 |
| 短時間或 t | 使用您當前文化的短時間格式顯示時間。例如,上午 11:07。 |
| f | 根據您當前文化的格式顯示長日期和短時間。例如,星期日,2012 年 12 月 16 日 上午 12:15。 |
| F | 根據您當前文化的格式顯示長日期和長時。例如,2012年12月16日星期日 上午12:15:31。 |
| g | 根據您當前文化的格式顯示短日期和短時。例如,2012/12/16 上午12:15。 |
| M, m | 顯示日期的月份和日期。例如,12月16日。 |
| R, r | 根據 RFC1123Pattern 屬性格式化日期。 |
| s | 將日期和時間格式化為可排序索引。例如,2012-12-16T12:07:31。 |
| u | 將日期和時間格式化為 GMT 可排序索引。例如,2012-12-16 12:15:31Z。 |
| U | 以 GMT 格式顯示長日期和長時的時間和日期。例如,2012年12月16日星期日 下午6:07:31。 |
| Y, y | 將日期格式化為年份和月份。例如,2012年12月。 |
對於其他格式,例如使用者定義的格式,請參閱 Microsoft 文件。
DateAndTime 類的屬性和方法
下表列出了一些常用的DateAndTime 類的屬性:
| 序號 | 屬性和說明 |
|---|---|
| 1 | Date 返回或設定一個表示系統當前日期的字串值。 |
| 2 | Now 返回一個包含系統當前日期和時間的 Date 值。 |
| 3 | TimeOfDay 返回或設定一個包含系統當前時間的 Date 值。 |
| 4 | Timer 返回一個 Double 值,表示自午夜起經過的秒數。 |
| 5 | TimeString 返回或設定一個表示系統當前時間的字串值。 |
| 6 | Today 獲取當前日期。 |
下表列出了一些常用的DateAndTime類的方法:
| 序號 | 方法名稱和描述 |
|---|---|
| 1 |
Public Shared Function DateAdd (Interval As DateInterval, Number As Double, DateValue As DateTime) As DateTime 返回一個 Date 值,其中包含已新增指定時間間隔的日期和時間值。 |
| 2 |
Public Shared Function DateAdd (Interval As String,Number As Double,DateValue As Object ) As DateTime 返回一個 Date 值,其中包含已新增指定時間間隔的日期和時間值。 |
| 3 |
Public Shared Function DateDiff (Interval As DateInterval, Date1 As DateTime, Date2 As DateTime, DayOfWeek As FirstDayOfWeek, WeekOfYear As FirstWeekOfYear ) As Long 返回一個 Long 值,指定兩個 Date 值之間的時間間隔數。 |
| 4 |
Public Shared Function DatePart (Interval As DateInterval, DateValue As DateTime, FirstDayOfWeekValue As FirstDayOfWeek, FirstWeekOfYearValue As FirstWeekOfYear ) As Integer 返回一個 Integer 值,包含給定 Date 值的指定元件。 |
| 5 |
Public Shared Function Day (DateValue As DateTime) As Integer 返回一個 Integer 值(1 到 31),表示月份中的某一天。 |
| 6 | Public Shared Function Hour (TimeValue As DateTime) As Integer 返回一個 Integer 值(0 到 23),表示一天中的小時。 |
| 7 |
Public Shared Function Minute (TimeValue As DateTime) As Integer 返回一個 Integer 值(0 到 59),表示小時中的分鐘。 |
| 8 |
Public Shared Function Month (DateValue As DateTime) As Integer 返回一個 Integer 值(1 到 12),表示一年中的月份。 |
| 9 |
Public Shared Function MonthName (Month As Integer, Abbreviate As Boolean) As String 返回一個包含指定月份名稱的字串值。 |
| 10 |
Public Shared Function Second (TimeValue As DateTime) As Integer 返回一個 Integer 值(0 到 59),表示分鐘中的秒數。 |
| 11 |
Public Overridable Function ToString As String 返回表示當前物件的字串。 |
| 12 |
Public Shared Function Weekday (DateValue As DateTime, DayOfWeek As FirstDayOfWeek) As Integer 返回一個 Integer 值,包含表示一週中某一天的數字。 |
| 13 |
Public Shared Function WeekdayName (Weekday As Integer, Abbreviate As Boolean, FirstDayOfWeekValue As FirstDayOfWeek) As String 返回一個包含指定工作日名稱的字串值。 |
| 14 |
Public Shared Function Year (DateValue As DateTime) As Integer 返回一個 Integer 值(1 到 9999),表示年份。 |
以上列表並不詳盡。有關 DateAndTime 類的屬性和方法的完整列表,請參閱 Microsoft 文件。
以下程式演示了一些這些屬性和方法:
Module Module1
Sub Main()
Dim birthday As Date
Dim bday As Integer
Dim month As Integer
Dim monthname As String
' Assign a date using standard short format.
birthday = #7/27/1998#
bday = Microsoft.VisualBasic.DateAndTime.Day(birthday)
month = Microsoft.VisualBasic.DateAndTime.Month(birthday)
monthname = Microsoft.VisualBasic.DateAndTime.MonthName(month)
Console.WriteLine(birthday)
Console.WriteLine(bday)
Console.WriteLine(month)
Console.WriteLine(monthname)
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
7/27/1998 12:00:00 AM 27 7 July
VB.Net - 陣列
陣列儲存相同型別元素的固定大小的順序集合。陣列用於儲存資料集合,但通常更有效地將陣列視為相同型別的變數集合。
所有陣列都由連續的記憶體位置組成。最低地址對應於第一個元素,最高地址對應於最後一個元素。
在 VB.Net 中建立陣列
要在 VB.Net 中宣告陣列,可以使用 Dim 語句。例如,
Dim intData(30) ' an array of 31 elements Dim strData(20) As String ' an array of 21 strings Dim twoDarray(10, 20) As Integer 'a two dimensional array of integers Dim ranges(10, 100) 'a two dimensional array
您也可以在宣告陣列時初始化陣列元素。例如,
Dim intData() As Integer = {12, 16, 20, 24, 28, 32}
Dim names() As String = {"Karthik", "Sandhya", _
"Shivangi", "Ashwitha", "Somnath"}
Dim miscData() As Object = {"Hello World", 12d, 16ui, "A"c}
可以使用陣列的索引來儲存和訪問陣列中的元素。以下程式演示了這一點:
Module arrayApl
Sub Main()
Dim n(10) As Integer ' n is an array of 11 integers '
Dim i, j As Integer
' initialize elements of array n '
For i = 0 To 10
n(i) = i + 100 ' set element at location i to i + 100
Next i
' output each array element's value '
For j = 0 To 10
Console.WriteLine("Element({0}) = {1}", j, n(j))
Next j
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Element(0) = 100 Element(1) = 101 Element(2) = 102 Element(3) = 103 Element(4) = 104 Element(5) = 105 Element(6) = 106 Element(7) = 107 Element(8) = 108 Element(9) = 109 Element(10) = 110
動態陣列
動態陣列是可以根據程式需要進行維度化和重新維度化的陣列。可以使用ReDim語句宣告動態陣列。
ReDim 語句的語法:
ReDim [Preserve] arrayname(subscripts)
其中:
Preserve關鍵字有助於在調整動態陣列大小時保留現有陣列中的資料。
arrayname是要重新維度化的陣列的名稱。
subscripts指定新的維度。
Module arrayApl
Sub Main()
Dim marks() As Integer
ReDim marks(2)
marks(0) = 85
marks(1) = 75
marks(2) = 90
ReDim Preserve marks(10)
marks(3) = 80
marks(4) = 76
marks(5) = 92
marks(6) = 99
marks(7) = 79
marks(8) = 75
For i = 0 To 10
Console.WriteLine(i & vbTab & marks(i))
Next i
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
0 85 1 75 2 90 3 80 4 76 5 92 6 99 7 79 8 75 9 0 10 0
多維陣列
VB.Net 允許使用多維陣列。多維陣列也稱為矩形陣列。
您可以宣告一個二維字串陣列,如下所示:
Dim twoDStringArray(10, 20) As String
或者,一個三維整數變數陣列:
Dim threeDIntArray(10, 10, 10) As Integer
以下程式演示了建立和使用二維陣列:
Module arrayApl
Sub Main()
' an array with 5 rows and 2 columns
Dim a(,) As Integer = {{0, 0}, {1, 2}, {2, 4}, {3, 6}, {4, 8}}
Dim i, j As Integer
' output each array element's value '
For i = 0 To 4
For j = 0 To 1
Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i, j))
Next j
Next i
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
a[0,0]: 0 a[0,1]: 0 a[1,0]: 1 a[1,1]: 2 a[2,0]: 2 a[2,1]: 4 a[3,0]: 3 a[3,1]: 6 a[4,0]: 4 a[4,1]: 8
鋸齒陣列
鋸齒陣列是陣列的陣列。以下程式碼顯示了宣告名為 *scores* 的整數鋸齒陣列:
Dim scores As Integer()() = New Integer(5)(){}
以下示例說明了如何使用鋸齒陣列:
Module arrayApl
Sub Main()
'a jagged array of 5 array of integers
Dim a As Integer()() = New Integer(4)() {}
a(0) = New Integer() {0, 0}
a(1) = New Integer() {1, 2}
a(2) = New Integer() {2, 4}
a(3) = New Integer() {3, 6}
a(4) = New Integer() {4, 8}
Dim i, j As Integer
' output each array element's value
For i = 0 To 4
For j = 0 To 1
Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i)(j))
Next j
Next i
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
a[0][0]: 0 a[0][1]: 0 a[1][0]: 1 a[1][1]: 2 a[2][0]: 2 a[2][1]: 4 a[3][0]: 3 a[3][1]: 6 a[4][0]: 4 a[4][1]: 8
Array 類
Array 類是 VB.Net 中所有陣列的基類。它在 System 名稱空間中定義。Array 類提供了各種屬性和方法來處理陣列。
Array 類的屬性
下表提供了一些最常用的Array類的屬性:
| 序號 | 屬性名稱和描述 |
|---|---|
| 1 |
IsFixedSize 獲取一個值,該值指示 Array 是否具有固定大小。 |
| 2 |
IsReadOnly 獲取一個值,該值指示 Array 是否為只讀。 |
| 3 |
Length Length |
| 4 |
獲取一個 32 位整數,該整數表示 Array 的所有維度中的元素總數。 LongLength |
| 5 |
獲取一個 64 位整數,該整數表示 Array 的所有維度中的元素總數。 Rank |
獲取 Array 的秩(維度數)。
Array 類的方 法
| 序號 | 方法名稱和描述 |
|---|---|
| 1 |
下表提供了一些最常用的Array類的方法: Public Shared Sub Clear (array As Array, index As Integer, length As Integer) |
| 2 |
將 Array 中的一系列元素設定為零、false 或 null,具體取決於元素型別。 Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Integer) |
| 3 |
從 Array 中從第一個元素開始複製一系列元素,並將它們貼上到另一個 Array 中(從第一個元素開始)。長度指定為 32 位整數。 Public Sub CopyTo (array As Array, index As Integer) |
| 4 |
將當前一維 Array 的所有元素複製到指定的從指定目標 Array 索引開始的一維 Array。索引指定為 32 位整數。 Public Function GetLength (dimension As Integer) As Integer |
| 5 |
獲取一個 32 位整數,該整數表示 Array 指定維度中的元素數。 Public Function GetLongLength (dimension As Integer) As Long |
| 6 |
獲取一個 64 位整數,該整數表示 Array 指定維度中的元素數。 Public Function GetLowerBound (dimension As Integer) As Integer |
| 7 |
獲取 Array 中指定維度的下界。 Public Function GetType As Type |
| 8 |
獲取當前例項的型別(繼承自 Object)。 Public Function GetUpperBound (dimension As Integer) As Integer |
| 9 |
獲取 Array 中指定維度的上界。 Public Function GetValue (index As Integer) As Object |
| 10 |
獲取一維 Array 中指定位置的值。索引指定為 32 位整數。 Public Shared Function IndexOf (array As Array,value As Object) As Integer |
| 11 |
搜尋指定的元素並返回在一維陣列中第一次出現的位置索引。 Public Shared Sub Reverse (array As Array) |
| 12 |
反轉整個一維 Array 中元素的順序。 Public Sub SetValue (value As Object, index As Integer) |
| 13 |
將值設定為一維 Array 中指定位置的元素。索引指定為 32 位整數。 Public Shared Sub Sort (array As Array) |
| 14 |
Public Overridable Function ToString As String 使用 Array 的每個元素的 IComparable 實現對整個一維 Array 中的元素進行排序。 |
ToString()
示例
返回表示當前物件的字串(繼承自 Object)。
Module arrayApl
Sub Main()
Dim list As Integer() = {34, 72, 13, 44, 25, 30, 10}
Dim temp As Integer() = list
Dim i As Integer
Console.Write("Original Array: ")
For Each i In list
Console.Write("{0} ", i)
Next i
Console.WriteLine()
' reverse the array
Array.Reverse(temp)
Console.Write("Reversed Array: ")
For Each i In temp
Console.Write("{0} ", i)
Next i
Console.WriteLine()
'sort the array
Array.Sort(list)
Console.Write("Sorted Array: ")
For Each i In list
Console.Write("{0} ", i)
Next i
Console.WriteLine()
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Original Array: 34 72 13 44 25 30 10 Reversed Array: 10 30 25 44 13 72 34 Sorted Array: 10 13 25 30 34 44 72
VB.Net - 集合
有關 Array 類屬性和方法的完整列表,請參閱 Microsoft 文件。
以下程式演示了 Array 類的一些方法的使用
集合類是用於資料儲存和檢索的專用類。這些類提供對堆疊、佇列、列表和雜湊表的支援。大多數集合類實現相同的介面。
集合類具有多種用途,例如動態地為元素分配記憶體以及基於索引訪問專案列表等。這些類建立 Object 類的物件集合,Object 類是 VB.Net 中所有資料型別的基類。
| Class | 各種集合類及其用法 |
|---|---|
|
說明和用法 ArrayList |
|
|
它基本上是陣列的替代方案。但是,與陣列不同,您可以使用索引在指定位置新增和刪除列表中的專案,並且陣列會自動調整自身大小。它還允許動態記憶體分配、新增、搜尋和排序列表中的專案。 Hashtable |
|
|
當您需要使用鍵訪問元素並且您可以識別有用的鍵值時,可以使用雜湊表。雜湊表中的每個專案都具有鍵/值對。鍵用於訪問集合中的專案。 SortedList |
|
|
排序列表是陣列和雜湊表的組合。它包含可以使用鍵或索引訪問的專案列表。如果使用索引訪問專案,則它是 ArrayList;如果使用鍵訪問專案,則它是 Hashtable。專案集合始終按鍵值排序。 Stack |
|
當您需要後進先出的專案訪問時,可以使用它。當您向列表中新增專案時,稱為推送專案;當您刪除專案時,稱為彈出專案。 當需要先進先出 (FIFO) 訪問專案時使用。向列表中新增專案稱為入隊 (enqueue),移除專案稱為出隊 (dequeue)。 |
|
|
它使用值 1 和 0 表示二進位制表示的陣列。 當需要儲存位但事先不知道位數時使用。可以使用從零開始的整數索引訪問 BitArray 集合中的專案。 |
VB.Net - 函式
過程是一組語句,當被呼叫時,這些語句一起執行一個任務。過程執行完畢後,控制權返回到呼叫該過程的語句。VB.Net 有兩種型別的過程:
函式 (Functions)
子過程或子程式 (Sub procedures or Subs)
函式返回一個值,而子程式不返回值。
定義函式 (Defining a Function)
Function 語句用於宣告函式的名稱、引數和主體。Function 語句的語法如下:
[Modifiers] Function FunctionName [(ParameterList)] As ReturnType [Statements] End Function
其中:
修飾符 (Modifiers) − 指定函式的訪問級別;可能的值包括:Public、Private、Protected、Friend、Protected Friend,以及關於過載、覆蓋、共享和隱藏的資訊。
函式名 (FunctionName) − 指示函式的名稱
引數列表 (ParameterList) − 指定引數列表
返回型別 (ReturnType) − 指定函式返回的變數的資料型別
示例
以下程式碼片段顯示了一個函式 FindMax,它接受兩個整數值並返回兩者中較大的一個。
Function FindMax(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
' local variable declaration */
Dim result As Integer
If (num1 > num2) Then
result = num1
Else
result = num2
End If
FindMax = result
End Function
函式返回值 (Function Returning a Value)
在 VB.Net 中,函式可以透過兩種方式將值返回給呼叫程式碼:
使用 return 語句
將值賦給函式名
以下示例演示瞭如何使用 FindMax 函式:
Module myfunctions
Function FindMax(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
' local variable declaration */
Dim result As Integer
If (num1 > num2) Then
result = num1
Else
result = num2
End If
FindMax = result
End Function
Sub Main()
Dim a As Integer = 100
Dim b As Integer = 200
Dim res As Integer
res = FindMax(a, b)
Console.WriteLine("Max value is : {0}", res)
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Max value is : 200
遞迴函式 (Recursive Function)
函式可以呼叫自身。這稱為遞迴。以下是一個使用遞迴函式計算給定數字階乘的示例:
Module myfunctions
Function factorial(ByVal num As Integer) As Integer
' local variable declaration */
Dim result As Integer
If (num = 1) Then
Return 1
Else
result = factorial(num - 1) * num
Return result
End If
End Function
Sub Main()
'calling the factorial method
Console.WriteLine("Factorial of 6 is : {0}", factorial(6))
Console.WriteLine("Factorial of 7 is : {0}", factorial(7))
Console.WriteLine("Factorial of 8 is : {0}", factorial(8))
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Factorial of 6 is: 720 Factorial of 7 is: 5040 Factorial of 8 is: 40320
引數陣列 (Param Arrays)
有時,在宣告函式或子過程時,您不確定作為引數傳遞的引數數量。VB.Net 引數陣列(或引數陣列)在這種情況下很有幫助。
以下示例演示了這一點:
Module myparamfunc
Function AddElements(ParamArray arr As Integer()) As Integer
Dim sum As Integer = 0
Dim i As Integer = 0
For Each i In arr
sum += i
Next i
Return sum
End Function
Sub Main()
Dim sum As Integer
sum = AddElements(512, 720, 250, 567, 889)
Console.WriteLine("The sum is: {0}", sum)
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
The sum is: 2938
將陣列作為函式引數傳遞 (Passing Arrays as Function Arguments)
您可以在 VB.Net 中將陣列作為函式引數傳遞。以下示例演示了這一點:
Module arrayParameter
Function getAverage(ByVal arr As Integer(), ByVal size As Integer) As Double
'local variables
Dim i As Integer
Dim avg As Double
Dim sum As Integer = 0
For i = 0 To size - 1
sum += arr(i)
Next i
avg = sum / size
Return avg
End Function
Sub Main()
' an int array with 5 elements '
Dim balance As Integer() = {1000, 2, 3, 17, 50}
Dim avg As Double
'pass pointer to the array as an argument
avg = getAverage(balance, 5)
' output the returned value '
Console.WriteLine("Average value is: {0} ", avg)
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Average value is: 214.4
VB.Net - 子過程 (Sub Procedures)
正如我們在上一章中提到的,子過程是不返回值的過程。在我們所有的示例中,我們一直在使用 Sub 過程 Main。到目前為止,我們在這些教程中一直在編寫控制檯應用程式。當這些應用程式啟動時,控制權將轉到 Main 子過程,然後它依次執行構成程式主體的任何其他語句。
定義子過程 (Defining Sub Procedures)
Sub 語句用於宣告子過程的名稱、引數和主體。Sub 語句的語法如下:
[Modifiers] Sub SubName [(ParameterList)] [Statements] End Sub
其中:
修飾符 (Modifiers) − 指定過程的訪問級別;可能的值包括:Public、Private、Protected、Friend、Protected Friend,以及關於過載、覆蓋、共享和隱藏的資訊。
子程式名 (SubName) − 指示 Sub 的名稱
引數列表 (ParameterList) − 指定引數列表
示例
以下示例演示了一個子過程 CalculatePay,它接受兩個引數 hours 和 wages 並顯示員工的總工資:
Module mysub
Sub CalculatePay(ByRef hours As Double, ByRef wage As Decimal)
'local variable declaration
Dim pay As Double
pay = hours * wage
Console.WriteLine("Total Pay: {0:C}", pay)
End Sub
Sub Main()
'calling the CalculatePay Sub Procedure
CalculatePay(25, 10)
CalculatePay(40, 20)
CalculatePay(30, 27.5)
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Total Pay: $250.00 Total Pay: $800.00 Total Pay: $825.00
按值傳遞引數 (Passing Parameters by Value)
這是將引數傳遞給方法的預設機制。在這種機制中,當呼叫方法時,將為每個值引數建立一個新的儲存位置。實際引數的值將複製到其中。因此,對方法內部引數所做的更改不會影響引數。
在 VB.Net 中,您可以使用ByVal關鍵字宣告引用引數。以下示例演示了這個概念:
Module paramByval
Sub swap(ByVal x As Integer, ByVal y As Integer)
Dim temp As Integer
temp = x ' save the value of x
x = y ' put y into x
y = temp 'put temp into y
End Sub
Sub Main()
' local variable definition
Dim a As Integer = 100
Dim b As Integer = 200
Console.WriteLine("Before swap, value of a : {0}", a)
Console.WriteLine("Before swap, value of b : {0}", b)
' calling a function to swap the values '
swap(a, b)
Console.WriteLine("After swap, value of a : {0}", a)
Console.WriteLine("After swap, value of b : {0}", b)
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Before swap, value of a :100 Before swap, value of b :200 After swap, value of a :100 After swap, value of b :200
它表明儘管值在函式內部已更改,但值並沒有改變。
按引用傳遞引數 (Passing Parameters by Reference)
引用引數是指向變數的記憶體位置的引用。當您按引用傳遞引數時,與值引數不同,不會為這些引數建立新的儲存位置。引用引數表示與提供給方法的實際引數相同的記憶體位置。
在 VB.Net 中,您可以使用ByRef關鍵字宣告引用引數。以下示例演示了這一點:
Module paramByref
Sub swap(ByRef x As Integer, ByRef y As Integer)
Dim temp As Integer
temp = x ' save the value of x
x = y ' put y into x
y = temp 'put temp into y
End Sub
Sub Main()
' local variable definition
Dim a As Integer = 100
Dim b As Integer = 200
Console.WriteLine("Before swap, value of a : {0}", a)
Console.WriteLine("Before swap, value of b : {0}", b)
' calling a function to swap the values '
swap(a, b)
Console.WriteLine("After swap, value of a : {0}", a)
Console.WriteLine("After swap, value of b : {0}", b)
Console.ReadLine()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Before swap, value of a : 100 Before swap, value of b : 200 After swap, value of a : 200 After swap, value of b : 100
VB.Net - 類和物件
當您定義一個類時,您定義了一種資料型別的藍圖。這實際上並沒有定義任何資料,但它確實定義了類名的含義,即類的物件將包含什麼以及可以在此類物件上執行什麼操作。
物件是類的例項。構成類的成員函式和變數稱為類的成員。
類定義 (Class Definition)
類定義以關鍵字Class開頭,後跟類名;以及類體,以 End Class 語句結束。以下是類定義的一般形式:
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _ Class name [ ( Of typelist ) ] [ Inherits classname ] [ Implements interfacenames ] [ statements ] End Class
其中:
attributelist 是應用於類的屬性列表。可選。
accessmodifier 定義類的訪問級別,其值包括 - Public、Protected、Friend、Protected Friend 和 Private。可選。
Shadows 指示變數重新宣告並隱藏基類中同名元素或一組過載元素。可選。
MustInherit 指定該類只能用作基類,並且不能直接從中建立物件,即抽象類。可選。
NotInheritable 指定該類不能用作基類。
Partial 指示類的部分定義。
Inherits 指定它繼承的基類。
Implements 指定類繼承的介面。
以下示例演示了一個 Box 類,它具有三個資料成員:length、breadth 和 height:
Module mybox
Class Box
Public length As Double ' Length of a box
Public breadth As Double ' Breadth of a box
Public height As Double ' Height of a box
End Class
Sub Main()
Dim Box1 As Box = New Box() ' Declare Box1 of type Box
Dim Box2 As Box = New Box() ' Declare Box2 of type Box
Dim volume As Double = 0.0 ' Store the volume of a box here
' box 1 specification
Box1.height = 5.0
Box1.length = 6.0
Box1.breadth = 7.0
' box 2 specification
Box2.height = 10.0
Box2.length = 12.0
Box2.breadth = 13.0
'volume of box 1
volume = Box1.height * Box1.length * Box1.breadth
Console.WriteLine("Volume of Box1 : {0}", volume)
'volume of box 2
volume = Box2.height * Box2.length * Box2.breadth
Console.WriteLine("Volume of Box2 : {0}", volume)
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Volume of Box1 : 210 Volume of Box2 : 1560
成員函式和封裝 (Member Functions and Encapsulation)
類的成員函式是在類定義中定義或原型與其他變數相同的函式。它操作其所屬類的任何物件,並可以訪問該物件的類的所有成員。
成員變數是物件(從設計角度來看)的屬性,它們被設定為私有以實現封裝。這些變數只能使用公共成員函式訪問。
讓我們將上述概念用於設定和獲取類中不同類成員的值:
Module mybox
Class Box
Public length As Double ' Length of a box
Public breadth As Double ' Breadth of a box
Public height As Double ' Height of a box
Public Sub setLength(ByVal len As Double)
length = len
End Sub
Public Sub setBreadth(ByVal bre As Double)
breadth = bre
End Sub
Public Sub setHeight(ByVal hei As Double)
height = hei
End Sub
Public Function getVolume() As Double
Return length * breadth * height
End Function
End Class
Sub Main()
Dim Box1 As Box = New Box() ' Declare Box1 of type Box
Dim Box2 As Box = New Box() ' Declare Box2 of type Box
Dim volume As Double = 0.0 ' Store the volume of a box here
' box 1 specification
Box1.setLength(6.0)
Box1.setBreadth(7.0)
Box1.setHeight(5.0)
'box 2 specification
Box2.setLength(12.0)
Box2.setBreadth(13.0)
Box2.setHeight(10.0)
' volume of box 1
volume = Box1.getVolume()
Console.WriteLine("Volume of Box1 : {0}", volume)
'volume of box 2
volume = Box2.getVolume()
Console.WriteLine("Volume of Box2 : {0}", volume)
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Volume of Box1 : 210 Volume of Box2 : 1560
建構函式和解構函式 (Constructors and Destructors)
類的建構函式是類的特殊成員 Sub,每當我們建立該類的新的物件時都會執行。建構函式的名稱為New,並且它沒有任何返回型別。
以下程式解釋了建構函式的概念:
Class Line
Private length As Double ' Length of a line
Public Sub New() 'constructor
Console.WriteLine("Object is being created")
End Sub
Public Sub setLength(ByVal len As Double)
length = len
End Sub
Public Function getLength() As Double
Return length
End Function
Shared Sub Main()
Dim line As Line = New Line()
'set line length
line.setLength(6.0)
Console.WriteLine("Length of line : {0}", line.getLength())
Console.ReadKey()
End Sub
End Class
當上述程式碼編譯並執行時,它會產生以下結果:
Object is being created Length of line : 6
預設建構函式沒有任何引數,但如果需要,建構函式可以有引數。這種建構函式稱為引數化建構函式。此技術可幫助您在建立物件時為其分配初始值,如下例所示:
Class Line
Private length As Double ' Length of a line
Public Sub New(ByVal len As Double) 'parameterised constructor
Console.WriteLine("Object is being created, length = {0}", len)
length = len
End Sub
Public Sub setLength(ByVal len As Double)
length = len
End Sub
Public Function getLength() As Double
Return length
End Function
Shared Sub Main()
Dim line As Line = New Line(10.0)
Console.WriteLine("Length of line set by constructor : {0}", line.getLength())
'set line length
line.setLength(6.0)
Console.WriteLine("Length of line set by setLength : {0}", line.getLength())
Console.ReadKey()
End Sub
End Class
當上述程式碼編譯並執行時,它會產生以下結果:
Object is being created, length = 10 Length of line set by constructor : 10 Length of line set by setLength : 6
解構函式是類的特殊成員 Sub,每當其類的物件超出範圍時都會執行。
解構函式的名稱為Finalize,它既不能返回值,也不能接受任何引數。解構函式對於在退出程式之前釋放資源(如關閉檔案、釋放記憶體等)非常有用。
解構函式不能被繼承或過載。
以下示例解釋了解構函式的概念:
Class Line
Private length As Double ' Length of a line
Public Sub New() 'parameterised constructor
Console.WriteLine("Object is being created")
End Sub
Protected Overrides Sub Finalize() ' destructor
Console.WriteLine("Object is being deleted")
End Sub
Public Sub setLength(ByVal len As Double)
length = len
End Sub
Public Function getLength() As Double
Return length
End Function
Shared Sub Main()
Dim line As Line = New Line()
'set line length
line.setLength(6.0)
Console.WriteLine("Length of line : {0}", line.getLength())
Console.ReadKey()
End Sub
End Class
當上述程式碼編譯並執行時,它會產生以下結果:
Object is being created Length of line : 6 Object is being deleted
VB.Net 類的共享成員 (Shared Members of a VB.Net Class)
我們可以使用 Shared 關鍵字將類成員定義為靜態的。當我們將類的成員宣告為 Shared 時,這意味著無論建立了多少個類的物件,都只有一個成員副本。
關鍵字Shared意味著類中只有一個成員例項存在。共享變數用於定義常量,因為可以透過呼叫類而不建立其例項來檢索它們的值。
共享變數可以在成員函式或類定義之外初始化。您也可以在類定義內初始化共享變數。
您還可以將成員函式宣告為 Shared。此類函式只能訪問共享變數。即使在建立物件之前,共享函式也存在。
以下示例演示了共享成員的使用:
Class StaticVar
Public Shared num As Integer
Public Sub count()
num = num + 1
End Sub
Public Shared Function getNum() As Integer
Return num
End Function
Shared Sub Main()
Dim s As StaticVar = New StaticVar()
s.count()
s.count()
s.count()
Console.WriteLine("Value of variable num: {0}", StaticVar.getNum())
Console.ReadKey()
End Sub
End Class
當上述程式碼編譯並執行時,它會產生以下結果:
Value of variable num: 3
繼承 (Inheritance)
面向物件程式設計中最重要概念之一是繼承。繼承允許我們根據另一個類定義一個類,這使得建立和維護應用程式更容易。這也提供了重用程式碼功能和加快實現時間的機會。
建立類時,程式設計師可以指定新類應該繼承現有類的成員,而不是編寫全新的資料成員和成員函式。這個現有類稱為基類,新類稱為派生類。
基類和派生類 (Base & Derived Classes)
一個類可以從多個類或介面派生,這意味著它可以繼承多個基類或介面的資料和函式。
VB.Net 中用於建立派生類的語法如下:
<access-specifier> Class <base_class> ... End Class Class <derived_class>: Inherits <base_class> ... End Class
考慮一個基類 Shape 及其派生類 Rectangle:
' Base class
Class Shape
Protected width As Integer
Protected height As Integer
Public Sub setWidth(ByVal w As Integer)
width = w
End Sub
Public Sub setHeight(ByVal h As Integer)
height = h
End Sub
End Class
' Derived class
Class Rectangle : Inherits Shape
Public Function getArea() As Integer
Return (width * height)
End Function
End Class
Class RectangleTester
Shared Sub Main()
Dim rect As Rectangle = New Rectangle()
rect.setWidth(5)
rect.setHeight(7)
' Print the area of the object.
Console.WriteLine("Total area: {0}", rect.getArea())
Console.ReadKey()
End Sub
End Class
當上述程式碼編譯並執行時,它會產生以下結果:
Total area: 35
基類初始化 (Base Class Initialization)
派生類繼承基類的成員變數和成員方法。因此,在建立子類之前,應先建立超類物件。超類或基類在 VB.Net 中隱式稱為MyBase
以下程式演示了這一點:
' Base class
Class Rectangle
Protected width As Double
Protected length As Double
Public Sub New(ByVal l As Double, ByVal w As Double)
length = l
width = w
End Sub
Public Function GetArea() As Double
Return (width * length)
End Function
Public Overridable Sub Display()
Console.WriteLine("Length: {0}", length)
Console.WriteLine("Width: {0}", width)
Console.WriteLine("Area: {0}", GetArea())
End Sub
'end class Rectangle
End Class
'Derived class
Class Tabletop : Inherits Rectangle
Private cost As Double
Public Sub New(ByVal l As Double, ByVal w As Double)
MyBase.New(l, w)
End Sub
Public Function GetCost() As Double
Dim cost As Double
cost = GetArea() * 70
Return cost
End Function
Public Overrides Sub Display()
MyBase.Display()
Console.WriteLine("Cost: {0}", GetCost())
End Sub
'end class Tabletop
End Class
Class RectangleTester
Shared Sub Main()
Dim t As Tabletop = New Tabletop(4.5, 7.5)
t.Display()
Console.ReadKey()
End Sub
End Class
當上述程式碼編譯並執行時,它會產生以下結果:
Length: 4.5 Width: 7.5 Area: 33.75 Cost: 2362.5
VB.Net 支援多重繼承。
VB.Net - 異常處理
異常是在程式執行期間出現的問題。異常是對程式執行期間出現的異常情況的響應,例如嘗試除以零。
異常提供了一種將控制從程式的一部分轉移到另一部分的方法。VB.Net 異常處理基於四個關鍵字 - Try、Catch、Finally 和 Throw。
Try − Try 塊標識將為其啟用特定異常的程式碼塊。它後面跟著一個或多個 Catch 塊。
捕獲 (Catch) − 程式使用異常處理程式在程式中需要處理問題的地方捕獲異常。Catch 關鍵字表示捕獲異常。
最終 (Finally) − Finally 塊用於執行給定的語句集,無論是否丟擲異常。例如,如果打開了一個檔案,無論是否引發異常,都必須關閉它。
丟擲 (Throw) − 當出現問題時,程式會丟擲異常。這是使用 Throw 關鍵字完成的。
語法
假設一個程式碼塊會引發異常,方法使用 Try 和 Catch 關鍵字的組合來捕獲異常。Try/Catch 塊放置在可能生成異常的程式碼周圍。Try/Catch 塊內的程式碼稱為受保護程式碼,使用 Try/Catch 的語法如下所示:
Try [ tryStatements ] [ Exit Try ] [ Catch [ exception [ As type ] ] [ When expression ] [ catchStatements ] [ Exit Try ] ] [ Catch ... ] [ Finally [ finallyStatements ] ] End Try
如果 try 塊在不同情況下引發多個異常,可以列出多個 catch 語句來捕獲不同型別的異常。
.Net Framework 中的異常類
在 .Net Framework 中,異常由類表示。.Net Framework 中的異常類主要直接或間接地派生自 System.Exception 類。一些從 System.Exception 類派生的異常類是 System.ApplicationException 和 System.SystemException 類。
System.ApplicationException 類支援應用程式程式生成的異常。因此,程式設計師定義的異常應該從此類派生。
System.SystemException 類是所有預定義系統異常的基類。
下表提供了一些從 Sytem.SystemException 類派生的預定義異常類:
| 異常類 | 說明 |
|---|---|
| System.IO.IOException | 處理 I/O 錯誤。 |
| System.IndexOutOfRangeException | 處理方法引用超出範圍的陣列索引時生成的錯誤。 |
| System.ArrayTypeMismatchException | 處理型別與陣列型別不匹配時生成的錯誤。 |
| System.NullReferenceException | 處理取消引用空物件時生成的錯誤。 |
| System.DivideByZeroException | 處理被零除時生成的錯誤。 |
| System.InvalidCastException | 處理型別轉換期間生成的錯誤。 |
| System.OutOfMemoryException | 處理可用記憶體不足時生成的錯誤。 |
| System.StackOverflowException | 處理堆疊溢位時生成的錯誤。 |
處理異常
VB.Net 提供了一種結構化的解決方案來處理 try 和 catch 塊中的異常處理問題。使用這些塊,核心程式語句與錯誤處理語句分開。
這些錯誤處理塊使用 Try、Catch 和 Finally 關鍵字實現。以下是在發生被零除情況時丟擲異常的示例:
Module exceptionProg
Sub division(ByVal num1 As Integer, ByVal num2 As Integer)
Dim result As Integer
Try
result = num1 \ num2
Catch e As DivideByZeroException
Console.WriteLine("Exception caught: {0}", e)
Finally
Console.WriteLine("Result: {0}", result)
End Try
End Sub
Sub Main()
division(25, 0)
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ... Result: 0
建立使用者定義的異常
您還可以定義自己的異常。使用者定義的異常類派生自 ApplicationException 類。以下示例演示了這一點:
Module exceptionProg
Public Class TempIsZeroException : Inherits ApplicationException
Public Sub New(ByVal message As String)
MyBase.New(message)
End Sub
End Class
Public Class Temperature
Dim temperature As Integer = 0
Sub showTemp()
If (temperature = 0) Then
Throw (New TempIsZeroException("Zero Temperature found"))
Else
Console.WriteLine("Temperature: {0}", temperature)
End If
End Sub
End Class
Sub Main()
Dim temp As Temperature = New Temperature()
Try
temp.showTemp()
Catch e As TempIsZeroException
Console.WriteLine("TempIsZeroException: {0}", e.Message)
End Try
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
TempIsZeroException: Zero Temperature found
丟擲物件
如果物件直接或間接地派生自 System.Exception 類,則可以丟擲該物件。
您可以在 catch 塊中使用 throw 語句丟擲當前物件,如下所示:
Throw [ expression ]
以下程式演示了這一點:
Module exceptionProg
Sub Main()
Try
Throw New ApplicationException("A custom exception _ is being thrown here...")
Catch e As Exception
Console.WriteLine(e.Message)
Finally
Console.WriteLine("Now inside the Finally Block")
End Try
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
A custom exception is being thrown here... Now inside the Finally Block
VB.Net - 檔案處理
檔案是在磁碟上儲存的資料集合,具有特定的名稱和目錄路徑。當檔案開啟以進行讀取或寫入時,它就變成了流。
流基本上是透過通訊路徑傳遞的位元組序列。主要有兩個流:輸入流和輸出流。輸入流用於從檔案讀取資料(讀取操作),輸出流用於寫入檔案(寫入操作)。
VB.Net I/O 類
System.IO 名稱空間具有用於執行各種檔案操作的各種類,例如建立和刪除檔案、讀取或寫入檔案、關閉檔案等。
下表顯示了 System.IO 名稱空間中一些常用的非抽象類:
| I/O 類 | 說明 |
|---|---|
| BinaryReader | 從二進位制流讀取原始資料。 |
| BinaryWriter | 以二進位制格式寫入原始資料。 |
| BufferedStream | 位元組流的臨時儲存。 |
| Directory | 幫助操作目錄結構。 |
| DirectoryInfo | 用於對目錄執行操作。 |
| DriveInfo | 提供驅動器資訊。 |
| File | 幫助操作檔案。 |
| FileInfo | 用於對檔案執行操作。 |
| FileStream | 用於讀取和寫入檔案的任何位置。 |
| MemoryStream | 用於隨機訪問儲存在記憶體中的流資料。 |
| Path | 對路徑資訊執行操作。 |
| StreamReader | 用於從位元組流讀取字元。 |
| StreamWriter | 用於將字元寫入流。 |
| StringReader | 用於從字串緩衝區讀取。 |
| StringWriter | 用於寫入字串緩衝區。 |
FileStream 類
System.IO 名稱空間中的 FileStream 類有助於讀取、寫入和關閉檔案。此類派生自抽象類 Stream。
需要建立一個 FileStream 物件來建立新檔案或開啟現有檔案。建立 FileStream 物件的語法如下:
Dim <object_name> As FileStream = New FileStream(<file_name>, <FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>)
例如,要為讀取名為 sample.txt 的檔案建立 FileStream 物件 F:
Dim f1 As FileStream = New FileStream("sample.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)
| 引數 | 說明 |
|---|---|
| FileMode |
FileMode 列舉定義了開啟檔案的各種方法。FileMode 列舉的成員有:
|
| FileAccess |
FileAccess 列舉具有成員:Read、ReadWrite 和 Write。 |
| FileShare |
FileShare 列舉具有以下成員:
|
示例
以下程式演示了 FileStream 類的用法:
Imports System.IO
Module fileProg
Sub Main()
Dim f1 As FileStream = New FileStream("sample.txt", _ FileMode.OpenOrCreate, FileAccess.ReadWrite)
Dim i As Integer
For i = 0 To 20
f1.WriteByte(CByte(i))
Next i
f1.Position = 0
For i = 0 To 20
Console.Write("{0} ", f1.ReadByte())
Next i
f1.Close()
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -1
VB.Net 中的高階檔案操作
前面的示例提供了 VB.Net 中簡單的檔案操作。但是,要利用 System.IO 類的強大功能,需要了解這些類的常用屬性和方法。
我們將在以下部分討論這些類及其執行的操作。請單擊提供的連結以訪問各個部分:
| 序號 | 主題和描述 |
|---|---|
| 1 |
它涉及從文字檔案讀取和寫入文字檔案。StreamReader 和 StreamWriter 類有助於完成此操作。 |
| 2 |
它涉及從二進位制檔案讀取和寫入二進位制檔案。BinaryReader 和 BinaryWriter 類有助於完成此操作。 |
| 3 |
它使 VB.Net 程式設計師能夠瀏覽和查詢 Windows 檔案和目錄。 |
VB.Net - 基本控制元件
物件是在 Visual Basic 窗體上使用工具箱控制元件建立的一種使用者介面元素型別。事實上,在 Visual Basic 中,窗體本身就是一個物件。每個 Visual Basic 控制元件都包含三個重要元素:
屬性描述物件;
方法使物件執行某些操作;以及
事件是物件執行某些操作時發生的事情。
控制元件屬性
所有 Visual Basic 物件都可以透過設定其屬性來移動、調整大小或自定義。屬性是 Visual Basic 物件持有的值或特性,例如標題或前景色。
屬性可以在設計時使用屬性視窗設定,也可以在執行時使用程式程式碼中的語句設定。
Object. Property = Value
其中
物件是您要自定義的物件的名稱。
屬性是您要更改的特性。
值是新的屬性設定。
例如:
Form1.Caption = "Hello"
您可以使用屬性視窗設定任何窗體屬性。大多數屬性可以在應用程式執行期間設定或讀取。您可以參考 Microsoft 文件,瞭解與不同控制元件關聯的完整屬性列表及其應用的限制。
控制元件方法
方法是作為類的成員建立的過程,它們使物件執行某些操作。方法用於訪問或操作物件的特性或變數。在類中將使用的主要有兩類方法:
如果您使用的是控制元件(例如工具箱提供的控制元件之一),則可以呼叫其任何公共方法。此類方法的要求取決於所使用的類。
如果現有方法無法執行您所需的任務,則可以向類新增方法。
例如,MessageBox 控制元件有一個名為 Show 的方法,它在下面的程式碼片段中呼叫:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
MessageBox.Show("Hello, World")
End Sub
End Class
控制元件事件
事件是一種訊號,它通知應用程式已發生重要事件。例如,當用戶單擊窗體上的控制元件時,窗體可以引發 Click 事件並呼叫處理該事件的過程。與窗體關聯的事件型別多種多樣,例如單擊、雙擊、關閉、載入、調整大小等。
以下是窗體 Load 事件處理程式子例程的預設結構。您可以雙擊程式碼檢視此程式碼,這將為您提供與窗體控制元件關聯的所有事件的完整列表:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'event handler code goes here End Sub
此處,Handles MyBase.Load 表示 Form1_Load() 子例程處理 Load 事件。類似地,您可以檢查單擊、雙擊的存根程式碼。如果要初始化某些變數(如屬性等),則會將此類程式碼保留在 Form1_Load() 子例程中。此處需要注意的重要一點是事件處理程式的名稱,預設情況下為 Form1_Load,但您可以根據應用程式程式設計中使用的命名約定更改此名稱。
基本控制元件
VB.Net 提供了各種控制元件,可幫助您建立豐富的使用者介面。所有這些控制元件的功能都在相應的控制元件類中定義。控制元件類在 System.Windows.Forms 名稱空間中定義。
下表列出了一些常用的控制元件:
| 序號 | 控制元件 & 描述 |
|---|---|
| 1 |
構成使用者介面的所有控制元件的容器。 |
| 2 |
它表示 Windows 文字框控制元件。 |
| 3 |
它表示標準 Windows 標籤。 |
| 4 |
它表示 Windows 按鈕控制元件。 |
| 5 |
它表示用於顯示專案列表的 Windows 控制元件。 |
| 6 |
它表示一個 Windows 組合框控制元件。 |
| 7 |
當與其他 RadioButton 控制元件配對使用時,它允許使用者從一組選項中選擇單個選項。 |
| 8 |
它表示一個 Windows 複選框。 |
| 9 |
它表示一個 Windows 圖片框控制元件,用於顯示影像。 |
| 10 |
它表示一個 Windows 進度條控制元件。 |
| 11 |
它實現了捲軸控制元件的基本功能。 |
| 12 |
它表示一個 Windows 控制元件,允許使用者選擇日期和時間,並以指定的格式顯示日期和時間。 |
| 13 |
它顯示一個層次結構的標記項集合,每個項都由一個 TreeNode 表示。 |
| 14 |
它表示一個 Windows 列表檢視控制元件,該控制元件顯示一個專案集合,可以使用四種不同的檢視之一顯示這些專案。 |
VB.Net - 對話方塊
Windows 窗體中有很多內建的對話方塊可用於各種任務,例如開啟和儲存檔案、列印頁面、為應用程式使用者提供顏色、字型、頁面設定等的選項。這些內建對話方塊減少了開發人員的時間和工作量。
所有這些對話方塊控制元件類都繼承自CommonDialog類,並覆蓋基類的RunDialog()函式以建立特定的對話方塊。
當對話方塊使用者呼叫其ShowDialog()函式時,會自動呼叫RunDialog()函式。
ShowDialog 方法用於在執行時顯示所有對話方塊控制元件。它返回DialogResult列舉型別的值。DialogResult 列舉的值為:
Abort − 當用戶單擊“Abort”按鈕時,返回 DialogResult.Abort 值。
Cancel − 當用戶單擊“Cancel”按鈕時,返回 DialogResult.Cancel 值。
Ignore − 當用戶單擊“Ignore”按鈕時,返回 DialogResult.Ignore 值。
No − 當用戶單擊“No”按鈕時,返回 DialogResult.No 值。
None − 不返回任何值,對話方塊繼續執行。
OK − 當用戶單擊“OK”按鈕時,返回 DialogResult.OK 值。
Retry − 當用戶單擊“Retry”按鈕時,返回 DialogResult.Retry 值。
Yes − 當用戶單擊“Yes”按鈕時,返回 DialogResult.Yes 值。
下圖顯示了公共對話方塊類的繼承關係:
所有上述類在設計時都具有相應的控制元件,可以從工具箱中新增。您可以透過以程式設計方式例項化類或使用相關控制元件來將這些類的相關功能包含到您的應用程式中。
雙擊工具箱中的任何對話方塊控制元件或將控制元件拖放到窗體上時,它會顯示在 Windows 窗體設計器底部的元件托盤中,它們不會直接顯示在窗體上。
下表列出了常用的對話方塊控制元件。單擊以下連結檢視其詳細資訊:
| 序號 | 控制元件和說明 |
|---|---|
| 1 |
它表示一個公共對話方塊,該對話方塊顯示可用的顏色以及允許使用者定義自定義顏色的控制元件。 |
| 2 |
它提示使用者從本地計算機上安裝的字型中選擇一種字型,並允許使用者選擇字型、字型大小和顏色。 |
| 3 |
它提示使用者開啟一個檔案,並允許使用者選擇要開啟的檔案。 |
| 4 |
它提示使用者選擇儲存檔案的位置,並允許使用者指定要儲存資料的檔名。 |
| 5 |
它允許使用者透過選擇印表機並選擇要從 Windows 窗體應用程式列印文件的哪些部分來列印文件。 |
VB.Net - 高階窗體
在本章中,我們將學習以下概念:
在應用程式中新增選單和子選單
在窗體中新增剪下、複製和貼上功能
在窗體中錨定和停靠控制元件
模式窗體
在應用程式中新增選單和子選單
傳統上,Menu、MainMenu、ContextMenu 和 MenuItem 類用於在 Windows 應用程式中新增選單、子選單和上下文選單。
現在,MenuStrip、ToolStripMenuItem、ToolStripDropDown 和 ToolStripDropDownMenu 控制元件取代了以前版本的與選單相關的控制元件,併為其添加了功能。但是,為了向後相容性和將來的使用,舊的控制元件類仍然保留。
讓我們首先使用舊版本的控制元件建立一個典型的 Windows 主選單欄和子選單,因為這些控制元件在舊應用程式中仍然被廣泛使用。
以下是一個示例,它展示瞭如何建立帶有選單項的選單欄:檔案、編輯、檢視和專案。檔案選單具有子選單新建、開啟和儲存。
雙擊窗體,並將以下程式碼放入開啟的視窗中。
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'defining the main menu bar
Dim mnuBar As New MainMenu()
'defining the menu items for the main menu bar
Dim myMenuItemFile As New MenuItem("&File")
Dim myMenuItemEdit As New MenuItem("&Edit")
Dim myMenuItemView As New MenuItem("&View")
Dim myMenuItemProject As New MenuItem("&Project")
'adding the menu items to the main menu bar
mnuBar.MenuItems.Add(myMenuItemFile)
mnuBar.MenuItems.Add(myMenuItemEdit)
mnuBar.MenuItems.Add(myMenuItemView)
mnuBar.MenuItems.Add(myMenuItemProject)
' defining some sub menus
Dim myMenuItemNew As New MenuItem("&New")
Dim myMenuItemOpen As New MenuItem("&Open")
Dim myMenuItemSave As New MenuItem("&Save")
'add sub menus to the File menu
myMenuItemFile.MenuItems.Add(myMenuItemNew)
myMenuItemFile.MenuItems.Add(myMenuItemOpen)
myMenuItemFile.MenuItems.Add(myMenuItemSave)
'add the main menu to the form
Me.Menu = mnuBar
' Set the caption bar text of the form.
Me.Text = "tutorialspoint.com"
End Sub
End Class
當使用 Microsoft Visual Studio 工具欄上的“啟動”按鈕執行和執行上述程式碼時,它將顯示以下視窗:
Windows 窗體包含一組豐富的類,用於建立具有現代外觀、外觀和感覺的自定義選單。MenuStrip、ToolStripMenuItem、ContextMenuStrip 控制元件用於高效地建立選單欄和上下文選單。
單擊以下連結檢視其詳細資訊:
| 序號 | 控制元件和說明 |
|---|---|
| 1 |
它為窗體提供菜單系統。 |
| 2 |
它表示顯示在MenuStrip 或 ContextMenuStrip 上的可選擇選項。ToolStripMenuItem 控制元件取代了以前版本的 MenuItem 控制元件,併為其添加了功能。 |
| 3 |
它表示一個快捷選單。 |
在窗體中新增剪下、複製和貼上功能
ClipBoard 類公開的方法用於在應用程式中新增剪下、複製和貼上功能。ClipBoard 類提供將資料放置到系統剪貼簿以及從系統剪貼簿檢索資料的方法。
它具有以下常用方法:
| 序號 | 方法名稱和描述 |
|---|---|
| 1 |
Clear 刪除剪貼簿中的所有資料。 |
| 2 |
ContainsData 指示剪貼簿中是否存在指定格式的資料,或者是否可以轉換為該格式。 |
| 3 |
ContainsImage 指示剪貼簿中是否存在 Bitmap 格式的資料,或者是否可以轉換為該格式。 |
| 4 |
ContainsText 指示剪貼簿中是否存在 Text 或 UnicodeText 格式的資料,具體取決於作業系統。 |
| 5 |
GetData 以指定格式從剪貼簿檢索資料。 |
| 6 |
GetDataObject 檢索當前位於系統剪貼簿上的資料。 |
| 7 |
GetImage 從剪貼簿檢索影像。 |
| 8 |
GetText 以 Text 或 UnicodeText 格式從剪貼簿檢索文字資料,具體取決於作業系統。 |
| 9 |
GetText(TextDataFormat) 以指定 TextDataFormat 值指示的格式從剪貼簿檢索文字資料。 |
| 10 |
SetData 清除剪貼簿,然後以指定格式新增資料。 |
| 11 |
SetText(String) 清除剪貼簿,然後以 Text 或 UnicodeText 格式新增文字資料,具體取決於作業系統。 |
以下是一個示例,它展示瞭如何使用 Clipboard 類的方 法剪下、複製和貼上資料。請按照以下步驟操作:
在窗體上新增一個富文字框控制元件和三個按鈕控制元件。
將按鈕的 Text 屬性分別更改為“剪下”、“複製”和“貼上”。
雙擊按鈕,將以下程式碼新增到程式碼編輯器中:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) _
Handles MyBase.Load
' Set the caption bar text of the form.
Me.Text = "tutorialspoint.com"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click
Clipboard.SetDataObject(RichTextBox1.SelectedText)
RichTextBox1.SelectedText = ""
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) _
Handles Button2.Click
Clipboard.SetDataObject(RichTextBox1.SelectedText)
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) _
Handles Button3.Click
Dim iData As IDataObject
iData = Clipboard.GetDataObject()
If (iData.GetDataPresent(DataFormats.Text)) Then
RichTextBox1.SelectedText = iData.GetData(DataFormats.Text)
Else
RichTextBox1.SelectedText = " "
End If
End Sub
End Class
當使用 Microsoft Visual Studio 工具欄上的啟動按鈕執行和執行上述程式碼時,它將顯示以下視窗:
輸入一些文字並檢查按鈕如何工作。
在窗體中錨定和停靠控制元件
錨定允許您為控制元件設定一個錨定位置到其容器控制元件(例如窗體)的邊緣。Control 類的Anchor 屬性允許您設定此屬性的值。Anchor 屬性獲取或設定控制元件繫結的容器的邊緣,並確定控制元件如何與其父級一起調整大小。
當您將控制元件錨定到窗體時,當窗體調整大小時,控制元件會保持與窗體邊緣的距離及其錨定位置。
您可以從“屬性”視窗設定控制元件的 Anchor 屬性值:
例如,讓我們在窗體上新增一個 Button 控制元件,並將其 Anchor 屬性設定為 Bottom、Right。執行此窗體以檢視 Button 控制元件相對於窗體的原始位置。
現在,當您拉伸窗體時,Button 與窗體右下角之間的距離保持不變。
控制元件的停靠意味著將其停靠到其容器的某個邊緣。在停靠中,控制元件完全填充容器的某個區域。
Control 類的Dock 屬性執行此操作。Dock 屬性獲取或設定停靠到其父控制元件的哪些控制元件邊框,並確定控制元件如何與其父級一起調整大小。
您可以從“屬性”視窗設定控制元件的 Dock 屬性值:
例如,讓我們在窗體上新增一個 Button 控制元件,並將其 Dock 屬性設定為 Bottom。執行此窗體以檢視 Button 控制元件相對於窗體的原始位置。
現在,當您拉伸窗體時,Button 會隨著窗體調整自身大小。
模式窗體
模式窗體是指在繼續處理應用程式的其餘部分之前需要關閉或隱藏的窗體。所有對話方塊都是模式窗體。訊息框也是模式窗體。
您可以透過兩種方式呼叫模式窗體:
呼叫ShowDialog 方法
呼叫Show 方法
讓我們來看一個示例,在這個示例中,我們將建立一個模式窗體(對話方塊)。請按照以下步驟操作:
嚮應用程式新增一個窗體 Form1,並向 Form1 新增兩個標籤和一個按鈕控制元件。
將第一個標籤和按鈕的文字屬性分別更改為“歡迎使用 Tutorials Point”和“輸入您的姓名”。保持第二個標籤的文字屬性為空。
新增一個新的 Windows 窗體 Form2,並在 Form2 中新增兩個按鈕、一個標籤和一個文字框。
將按鈕的文字屬性分別更改為“確定”和“取消”。將標籤的文字屬性更改為“輸入您的姓名:”。
將 Form2 的FormBorderStyle 屬性設定為FixedDialog,使其具有對話方塊邊框。
將 Form2 的ControlBox 屬性設定為 False。
將 Form2 的ShowInTaskbar 屬性設定為 False。
將“確定”按鈕的DialogResult 屬性設定為 OK,將“取消”按鈕的DialogResult 屬性設定為 Cancel。
在 Form2 的 Form2_Load 方法中新增以下程式碼片段:
Private Sub Form2_Load(sender As Object, e As EventArgs) _ Handles MyBase.Load AcceptButton = Button1 CancelButton = Button2 End Sub
在 Form1 的 Button1_Click 方法中新增以下程式碼片段:
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click
Dim frmSecond As Form2 = New Form2()
If frmSecond.ShowDialog() = DialogResult.OK Then
Label2.Text = frmSecond.TextBox1.Text
End If
End Sub
當使用 Microsoft Visual Studio 工具欄上的啟動按鈕執行和執行上述程式碼時,它將顯示以下視窗:
單擊“輸入您的姓名”按鈕將顯示第二個窗體。
單擊“確定”按鈕將控制權和資訊從模態窗體返回到上一個窗體。
VB.Net - 事件處理
事件基本上是使用者操作,例如按鍵、單擊、滑鼠移動等,或某些事件,例如系統生成的通知。應用程式需要在事件發生時做出響應。
單擊按鈕、在文字框中輸入一些文字或單擊選單項,這些都是事件的示例。事件是一個呼叫函式或可能導致另一個事件的動作。事件處理程式是指示如何響應事件的函式。
VB.Net 是一種事件驅動的語言。主要有兩種型別的事件:
滑鼠事件
鍵盤事件
處理滑鼠事件
滑鼠事件在窗體和控制元件中的滑鼠移動時發生。以下是與 Control 類相關的各種滑鼠事件:
MouseDown - 當按下滑鼠按鈕時發生
MouseEnter - 當滑鼠指標進入控制元件時發生
MouseHover - 當滑鼠指標懸停在控制元件上時發生
MouseLeave - 當滑鼠指標離開控制元件時發生
MouseMove - 當滑鼠指標在控制元件上移動時發生
MouseUp - 當滑鼠指標在控制元件上並且釋放滑鼠按鈕時發生
MouseWheel - 當滑鼠滾輪移動且控制元件具有焦點時發生
滑鼠事件的事件處理程式獲取型別為MouseEventArgs 的引數。MouseEventArgs 物件用於處理滑鼠事件。它具有以下屬性:
Buttons - 指示按下的滑鼠按鈕
Clicks - 指示單擊次數
Delta - 指示滑鼠滾輪旋轉的微調次數
X - 指示滑鼠單擊的 x 座標
Y - 指示滑鼠單擊的 y 座標
示例
以下是一個示例,它顯示瞭如何處理滑鼠事件。請按照以下步驟操作:
在窗體中新增三個標籤、三個文字框和一個按鈕控制元件。
將標籤的文字屬性分別更改為 - 客戶 ID、姓名和地址。
將文字框的名稱屬性分別更改為 txtID、txtName 和 txtAddress。
將按鈕的文字屬性更改為“提交”。
在程式碼編輯器視窗中新增以下程式碼:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Set the caption bar text of the form.
Me.Text = "tutorialspont.com"
End Sub
Private Sub txtID_MouseEnter(sender As Object, e As EventArgs)_
Handles txtID.MouseEnter
'code for handling mouse enter on ID textbox
txtID.BackColor = Color.CornflowerBlue
txtID.ForeColor = Color.White
End Sub
Private Sub txtID_MouseLeave(sender As Object, e As EventArgs) _
Handles txtID.MouseLeave
'code for handling mouse leave on ID textbox
txtID.BackColor = Color.White
txtID.ForeColor = Color.Blue
End Sub
Private Sub txtName_MouseEnter(sender As Object, e As EventArgs) _
Handles txtName.MouseEnter
'code for handling mouse enter on Name textbox
txtName.BackColor = Color.CornflowerBlue
txtName.ForeColor = Color.White
End Sub
Private Sub txtName_MouseLeave(sender As Object, e As EventArgs) _
Handles txtName.MouseLeave
'code for handling mouse leave on Name textbox
txtName.BackColor = Color.White
txtName.ForeColor = Color.Blue
End Sub
Private Sub txtAddress_MouseEnter(sender As Object, e As EventArgs) _
Handles txtAddress.MouseEnter
'code for handling mouse enter on Address textbox
txtAddress.BackColor = Color.CornflowerBlue
txtAddress.ForeColor = Color.White
End Sub
Private Sub txtAddress_MouseLeave(sender As Object, e As EventArgs) _
Handles txtAddress.MouseLeave
'code for handling mouse leave on Address textbox
txtAddress.BackColor = Color.White
txtAddress.ForeColor = Color.Blue
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click
MsgBox("Thank you " & txtName.Text & ", for your kind cooperation")
End Sub
End Class
當使用 Microsoft Visual Studio 工具欄上的啟動按鈕執行和執行上述程式碼時,它將顯示以下視窗:
嘗試在文字框中輸入文字並檢查滑鼠事件:
處理鍵盤事件
以下是與 Control 類相關的各種鍵盤事件:
KeyDown - 當按下按鍵且控制元件具有焦點時發生
KeyPress - 當按下按鍵且控制元件具有焦點時發生
KeyUp - 當釋放按鍵且控制元件具有焦點時發生
KeyDown 和 KeyUp 事件的事件處理程式獲取型別為KeyEventArgs 的引數。此物件具有以下屬性:
Alt - 指示是否按下了 ALT 鍵
Control - 指示是否按下了 CTRL 鍵
Handled - 指示是否處理了事件
KeyCode - 儲存事件的鍵盤程式碼
KeyData - 儲存事件的鍵盤資料
KeyValue - 儲存事件的鍵盤值
Modifiers - 指示按下了哪些修飾鍵(Ctrl、Shift 和/或 Alt)
Shift - 指示是否按下了 Shift 鍵
KeyDown 和 KeyUp 事件的事件處理程式獲取型別為KeyEventArgs 的引數。此物件具有以下屬性:
Handled - 指示是否處理了 KeyPress 事件
KeyChar - 儲存與按下的鍵相對應的字元
示例
讓我們繼續使用前面的示例來演示如何處理鍵盤事件。程式碼將驗證使用者是否為其客戶 ID 和年齡輸入了一些數字。
新增一個文字屬性為“年齡”的標籤,並新增一個名為 txtAge 的相應文字框。
新增以下程式碼以處理 txtID 文字框的 KeyUP 事件。
Private Sub txtID_KeyUP(sender As Object, e As KeyEventArgs) _
Handles txtID.KeyUp
If (Not Char.IsNumber(ChrW(e.KeyCode))) Then
MessageBox.Show("Enter numbers for your Customer ID")
txtID.Text = " "
End If
End Sub
新增以下程式碼以處理 txtID 文字框的 KeyUP 事件。
Private Sub txtAge_KeyUP(sender As Object, e As KeyEventArgs) _
Handles txtAge.KeyUp
If (Not Char.IsNumber(ChrW(e.keyCode))) Then
MessageBox.Show("Enter numbers for age")
txtAge.Text = " "
End If
End Sub
當使用 Microsoft Visual Studio 工具欄上的啟動按鈕執行和執行上述程式碼時,它將顯示以下視窗:
如果您將年齡或 ID 的文字留空或輸入一些非數字資料,它會顯示一個警告訊息框並清除相應的文字:
VB.Net - 正則表示式
正則表示式是一種可以與輸入文字匹配的模式。.Net 框架提供了一個允許這種匹配的正則表示式引擎。模式由一個或多個字元字面量、運算子或構造組成。
定義正則表示式的構造
有各種型別的字元、運算子和構造可以讓你定義正則表示式。單擊以下連結以查詢這些構造。
Regex 類
Regex 類用於表示正則表示式。
Regex 類具有以下常用方法:
| 序號 | 方法和說明 |
|---|---|
| 1 |
Public Function IsMatch (input As String) As Boolean 指示 Regex 建構函式中指定的正則表示式是否在指定的輸入字串中找到匹配項。 |
| 2 |
Public Function IsMatch (input As String, startat As Integer ) As Boolean 指示 Regex 建構函式中指定的正則表示式是否在指定的輸入字串中找到匹配項,從字串中的指定起始位置開始。 |
| 3 |
Public Shared Function IsMatch (input As String, pattern As String ) As Boolean 指示指定的正則表示式是否在指定的輸入字串中找到匹配項。 |
| 4 |
Public Function Matches (input As String) As MatchCollection 搜尋指定的輸入字串中正則表示式的所有出現。 |
| 5 |
Public Function Replace (input As String, replacement As String) As String 在指定的輸入字串中,將與正則表示式模式匹配的所有字串替換為指定的替換字串。 |
| 6 |
Public Function Split (input As String) As String() 根據 Regex 建構函式中指定的正則表示式模式定義的位置,將輸入字串拆分為子字串陣列。 |
有關方法和屬性的完整列表,請參閱 Microsoft 文件。
示例 1
以下示例匹配以“S”開頭的單詞:
Imports System.Text.RegularExpressions
Module regexProg
Sub showMatch(ByVal text As String, ByVal expr As String)
Console.WriteLine("The Expression: " + expr)
Dim mc As MatchCollection = Regex.Matches(text, expr)
Dim m As Match
For Each m In mc
Console.WriteLine(m)
Next m
End Sub
Sub Main()
Dim str As String = "A Thousand Splendid Suns"
Console.WriteLine("Matching words that start with 'S': ")
showMatch(str, "\bS\S*")
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Matching words that start with 'S': The Expression: \bS\S* Splendid Suns
示例 2
以下示例匹配以“m”開頭並以“e”結尾的單詞:
Imports System.Text.RegularExpressions
Module regexProg
Sub showMatch(ByVal text As String, ByVal expr As String)
Console.WriteLine("The Expression: " + expr)
Dim mc As MatchCollection = Regex.Matches(text, expr)
Dim m As Match
For Each m In mc
Console.WriteLine(m)
Next m
End Sub
Sub Main()
Dim str As String = "make a maze and manage to measure it"
Console.WriteLine("Matching words that start with 'm' and ends with 'e': ")
showMatch(str, "\bm\S*e\b")
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Matching words start with 'm' and ends with 'e': The Expression: \bm\S*e\b make maze manage measure
示例 3
此示例替換多餘的空格:
Imports System.Text.RegularExpressions
Module regexProg
Sub Main()
Dim input As String = "Hello World "
Dim pattern As String = "\\s+"
Dim replacement As String = " "
Dim rgx As Regex = New Regex(pattern)
Dim result As String = rgx.Replace(input, replacement)
Console.WriteLine("Original String: {0}", input)
Console.WriteLine("Replacement String: {0}", result)
Console.ReadKey()
End Sub
End Module
當上述程式碼編譯並執行時,它會產生以下結果:
Original String: Hello World Replacement String: Hello World
VB.Net - 資料庫訪問
應用程式首先與資料庫通訊以檢索其中儲存的資料並以使用者友好的方式呈現它,其次是透過插入、修改和刪除資料來更新資料庫。
Microsoft ActiveX Data Objects.Net (ADO.Net) 是 .Net 框架的一部分,.Net 應用程式使用它來檢索、訪問和更新資料。
ADO.Net 物件模型
ADO.Net 物件模型只不過是透過各種元件的結構化流程。物件模型可以圖解如下:
駐留在資料儲存或資料庫中的資料透過資料提供程式檢索。資料提供程式的各種元件為應用程式檢索資料並更新資料。
應用程式可以透過資料集或資料讀取器訪問資料。
資料集將資料儲存在斷開連線的快取中,應用程式從中檢索資料。
資料讀取器以只讀和向前模式為應用程式提供資料。
資料提供程式
資料提供程式用於連線到資料庫、執行命令和檢索資料、將其儲存在資料集中、讀取檢索到的資料和更新資料庫。
ADO.Net 中的資料提供程式包含以下四個物件:
| 序號 | 物件和說明 |
|---|---|
| 1 |
連線 此元件用於建立與資料來源的連線。 |
| 2 |
命令 命令是用於檢索、插入、刪除或修改資料來源中資料的 SQL 語句或儲存過程。 |
| 3 |
資料讀取器 資料讀取器用於以只讀和向前模式從資料來源檢索資料。 |
| 4 |
資料介面卡 這是 ADO.Net 工作的組成部分,因為資料是透過資料介面卡傳輸到資料庫和從資料庫傳輸的。它將資料從資料庫檢索到資料集中並更新資料庫。當對資料集進行更改時,資料介面卡實際上會對資料庫中的更改進行處理。 |
ADO.Net 中包含以下不同型別的資料提供程式
用於 SQL Server 的 .Net Framework 資料提供程式 - 提供對 Microsoft SQL Server 的訪問。
用於 OLE DB 的 .Net Framework 資料提供程式 - 提供對使用 OLE DB 公開的資料庫的訪問。
用於 ODBC 的 .Net Framework 資料提供程式 - 提供對 ODBC 公開的資料庫的訪問。
用於 Oracle 的 .Net Framework 資料提供程式 - 提供對 Oracle 資料來源的訪問。
EntityClient 提供程式 - 能夠透過實體資料模型 (EDM) 應用程式訪問資料。
資料集
資料集是資料的記憶體中表示。它是從資料庫檢索到的斷開連線的快取記錄集。當與資料庫建立連線時,資料介面卡將建立一個數據集並將資料儲存在其中。檢索並存儲在資料集中後,與資料庫的連線將關閉。這稱為“斷開連線體系結構”。資料集充當包含表、行和列的虛擬資料庫。
下圖顯示了資料集物件模型:
DataSet 類位於System.Data名稱空間中。下表描述了 DataSet 的所有元件:
| 序號 | 元件和說明 |
|---|---|
| 1 |
DataTableCollection 它包含從資料來源檢索到的所有表。 |
| 2 |
DataRelationCollection 它包含資料集中的表之間的關係和連結。 |
| 3 |
ExtendedProperties 它包含其他資訊,例如用於檢索資料的 SQL 語句、檢索時間等。 |
| 4 |
DataTable 它表示資料集中 DataTableCollection 中的表。它由 DataRow 和 DataColumn 物件組成。DataTable 物件區分大小寫。 |
| 5 |
DataRelation 它表示資料集中 DataRelationshipCollection 中的關係。它用於透過 DataColumn 物件將兩個 DataTable 物件彼此關聯。 |
| 6 |
DataRowCollection 它包含 DataTable 中的所有行。 |
| 7 |
DataView 它表示 DataTable 的固定自定義檢視,用於排序、篩選、搜尋、編輯和導航。 |
| 8 |
PrimaryKey 它表示唯一標識 DataTable 中行的列。 |
| 9 |
DataRow 它代表 DataTable 中的一行。DataRow 物件及其屬性和方法用於檢索、評估、插入、刪除和更新 DataTable 中的值。NewRow 方法用於建立新行,Add 方法用於將行新增到表中。 |
| 10 |
DataColumnCollection 它表示 DataTable 中的所有列。 |
| 11 |
DataColumn 它包含組成 DataTable 的列數。 |
連線到資料庫
.Net Framework 提供兩種型別的連線類:
SqlConnection - 用於連線到 Microsoft SQL Server。
OleDbConnection - 用於連線到各種資料庫,例如 Microsoft Access 和 Oracle。
示例 1
我們在名為 testDB 的資料庫中有一個儲存在 Microsoft SQL Server 中的名為 Customers 的表。請參閱“SQL Server”教程,瞭解如何在 SQL Server 中建立資料庫和資料庫表。
讓我們連線到此資料庫。請按照以下步驟操作:
選擇工具 → 連線到資料庫
在“新增連線”對話方塊中選擇伺服器名稱和資料庫名稱。
M
單擊“測試連線”按鈕以檢查連線是否成功。
在窗體上新增一個 DataGridView。
單擊“選擇資料來源”組合框。
單擊“新增專案資料來源”連結。
這將開啟資料來源配置嚮導。
選擇資料庫作為資料來源型別
選擇 DataSet 作為資料庫模型。
選擇已設定的連線。
儲存連線字串。
選擇資料庫物件(在我們的示例中為 Customers 表),然後單擊“完成”按鈕。
選擇“預覽資料”連結以檢視結果網格中的資料:
使用 Microsoft Visual Studio 工具欄中的啟動按鈕執行應用程式時,將顯示以下視窗:
示例 2
在此示例中,讓我們使用程式碼訪問 DataGridView 控制元件中的資料。請按照以下步驟操作:
在窗體中新增 DataGridView 控制元件和一個按鈕。
將按鈕控制元件的文字更改為“填充”。
雙擊按鈕控制元件以新增按鈕 Click 事件所需的程式碼,如下所示:
Imports System.Data.SqlClient
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) _
Handles MyBase.Load
'TODO: This line of code loads data into the 'TestDBDataSet.CUSTOMERS' table.
You can move, or remove it, as needed.
Me.CUSTOMERSTableAdapter.Fill(Me.TestDBDataSet.CUSTOMERS)
' Set the caption bar text of the form.
Me.Text = "tutorialspoint.com"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim connection As SqlConnection = New sqlconnection()
connection.ConnectionString = "Data Source=KABIR-DESKTOP; _
Initial Catalog=testDB;Integrated Security=True"
connection.Open()
Dim adp As SqlDataAdapter = New SqlDataAdapter _
("select * from Customers", connection)
Dim ds As DataSet = New DataSet()
adp.Fill(ds)
DataGridView1.DataSource = ds.Tables(0)
End Sub
End Class
當使用 Microsoft Visual Studio 工具欄上的啟動按鈕執行和執行上述程式碼時,它將顯示以下視窗:
單擊“填充”按鈕會在資料網格檢視控制元件上顯示錶格:
建立表、列和行
我們已經討論過,DataSet 元件(如 DataTable、DataColumn 和 DataRow)分別允許我們建立表、列和行。
以下示例演示了這個概念:
示例 3
到目前為止,我們使用的表和資料庫已存在於我們的計算機中。在此示例中,我們將建立一個表,新增列、行和資料,並使用 DataGridView 物件顯示該表。
請按照以下步驟操作:
在窗體中新增 DataGridView 控制元件和一個按鈕。
將按鈕控制元件的文字更改為“填充”。
在程式碼編輯器中新增以下程式碼。
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Set the caption bar text of the form.
Me.Text = "tutorialspont.com"
End Sub
Private Function CreateDataSet() As DataSet
'creating a DataSet object for tables
Dim dataset As DataSet = New DataSet()
' creating the student table
Dim Students As DataTable = CreateStudentTable()
dataset.Tables.Add(Students)
Return dataset
End Function
Private Function CreateStudentTable() As DataTable
Dim Students As DataTable
Students = New DataTable("Student")
' adding columns
AddNewColumn(Students, "System.Int32", "StudentID")
AddNewColumn(Students, "System.String", "StudentName")
AddNewColumn(Students, "System.String", "StudentCity")
' adding rows
AddNewRow(Students, 1, "Zara Ali", "Kolkata")
AddNewRow(Students, 2, "Shreya Sharma", "Delhi")
AddNewRow(Students, 3, "Rini Mukherjee", "Hyderabad")
AddNewRow(Students, 4, "Sunil Dubey", "Bikaner")
AddNewRow(Students, 5, "Rajat Mishra", "Patna")
Return Students
End Function
Private Sub AddNewColumn(ByRef table As DataTable, _
ByVal columnType As String, ByVal columnName As String)
Dim column As DataColumn = _
table.Columns.Add(columnName, Type.GetType(columnType))
End Sub
'adding data into the table
Private Sub AddNewRow(ByRef table As DataTable, ByRef id As Integer,_
ByRef name As String, ByRef city As String)
Dim newrow As DataRow = table.NewRow()
newrow("StudentID") = id
newrow("StudentName") = name
newrow("StudentCity") = city
table.Rows.Add(newrow)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ds As New DataSet
ds = CreateDataSet()
DataGridView1.DataSource = ds.Tables("Student")
End Sub
End Class
當使用 Microsoft Visual Studio 工具欄上的啟動按鈕執行和執行上述程式碼時,它將顯示以下視窗:
單擊“填充”按鈕會在資料網格檢視控制元件上顯示錶格:
VB.Net - Excel表格
VB.Net 支援 Microsoft Excel 2010 的 COM 物件模型與您的應用程式之間的互操作性。
為了在您的應用程式中使用此互操作性,您需要在 Windows 窗體應用程式中匯入名稱空間Microsoft.Office.Interop.Excel。
從 VB.Net 建立 Excel 應用程式
讓我們按照 Microsoft Visual Studio 中的以下步驟建立一個 Windows 窗體應用程式:檔案 → 新建專案 → Windows 窗體應用程式
最後,選擇“確定”,Microsoft Visual Studio 將建立您的專案並顯示以下Form1。
在窗體中插入一個 Button 控制元件 Button1。
將對 Microsoft Excel 物件庫的引用新增到您的專案。為此:
從“專案”選單中選擇“新增引用”。
在“COM”選項卡上,找到 Microsoft Excel 物件庫,然後單擊“選擇”。
單擊“確定”。
雙擊程式碼視窗並填充 Button1 的 Click 事件,如下所示。
' Add the following code snippet on top of Form1.vb
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim appXL As Excel.Application
Dim wbXl As Excel.Workbook
Dim shXL As Excel.Worksheet
Dim raXL As Excel.Range
' Start Excel and get Application object.
appXL = CreateObject("Excel.Application")
appXL.Visible = True
' Add a new workbook.
wbXl = appXL.Workbooks.Add
shXL = wbXl.ActiveSheet
' Add table headers going cell by cell.
shXL.Cells(1, 1).Value = "First Name"
shXL.Cells(1, 2).Value = "Last Name"
shXL.Cells(1, 3).Value = "Full Name"
shXL.Cells(1, 4).Value = "Specialization"
' Format A1:D1 as bold, vertical alignment = center.
With shXL.Range("A1", "D1")
.Font.Bold = True
.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
End With
' Create an array to set multiple values at once.
Dim students(5, 2) As String
students(0, 0) = "Zara"
students(0, 1) = "Ali"
students(1, 0) = "Nuha"
students(1, 1) = "Ali"
students(2, 0) = "Arilia"
students(2, 1) = "RamKumar"
students(3, 0) = "Rita"
students(3, 1) = "Jones"
students(4, 0) = "Umme"
students(4, 1) = "Ayman"
' Fill A2:B6 with an array of values (First and Last Names).
shXL.Range("A2", "B6").Value = students
' Fill C2:C6 with a relative formula (=A2 & " " & B2).
raXL = shXL.Range("C2", "C6")
raXL.Formula = "=A2 & "" "" & B2"
' Fill D2:D6 values.
With shXL
.Cells(2, 4).Value = "Biology"
.Cells(3, 4).Value = "Mathmematics"
.Cells(4, 4).Value = "Physics"
.Cells(5, 4).Value = "Mathmematics"
.Cells(6, 4).Value = "Arabic"
End With
' AutoFit columns A:D.
raXL = shXL.Range("A1", "D1")
raXL.EntireColumn.AutoFit()
' Make sure Excel is visible and give the user control
' of Excel's lifetime.
appXL.Visible = True
appXL.UserControl = True
' Release object references.
raXL = Nothing
shXL = Nothing
wbXl = Nothing
appXL.Quit()
appXL = Nothing
Exit Sub
Err_Handler:
MsgBox(Err.Description, vbCritical, "Error: " & Err.Number)
End Sub
End Class
當使用 Microsoft Visual Studio 工具欄上的啟動按鈕執行和執行上述程式碼時,它將顯示以下視窗:
單擊按鈕將顯示以下 Excel 表格。系統將要求您儲存工作簿。
VB.Net - 傳送郵件
VB.Net 允許從您的應用程式傳送電子郵件。System.Net.Mail 名稱空間包含用於將電子郵件傳送到簡單郵件傳輸協議 (SMTP) 伺服器以進行傳遞的類。
下表列出了一些常用類:
| 序號 | 類和描述 |
|---|---|
| 1 | Attachment 表示電子郵件的附件。 |
| 2 | AttachmentCollection 儲存作為電子郵件的一部分發送的附件。 |
| 3 | MailAddress 表示電子郵箱發件人或收件人的地址。 |
| 4 | MailAddressCollection 儲存與電子郵件關聯的電子郵件地址。 |
| 5 | MailMessage 表示可以使用 SmtpClient 類傳送的電子郵件。 |
| 6 | SmtpClient 允許應用程式使用簡單郵件傳輸協議 (SMTP) 傳送電子郵件。 |
| 7 | SmtpException 表示當 SmtpClient 無法完成 Send 或 SendAsync 操作時丟擲的異常。 |
SmtpClient 類
SmtpClient 類允許應用程式使用簡單郵件傳輸協議 (SMTP) 傳送電子郵件。
以下是 SmtpClient 類的一些常用屬性:
| 序號 | 屬性和說明 |
|---|---|
| 1 | ClientCertificates 指定應使用哪些證書來建立安全套接字層 (SSL) 連線。 |
| 2 | Credentials 獲取或設定用於驗證發件人的憑據。 |
| 3 | EnableSsl 指定 SmtpClient 是否使用安全套接字層 (SSL) 加密連線。 |
| 4 | Host 獲取或設定用於 SMTP 事務的主機名稱或 IP 地址。 |
| 5 | Port 獲取或設定用於 SMTP 事務的埠。 |
| 6 |
Timeout 獲取或設定一個值,該值指定同步 Send 呼叫超時的時間量。 |
| 7 | UseDefaultCredentials 獲取或設定一個布林值,該值控制是否將 DefaultCredentials 傳送到請求。 |
以下是 SmtpClient 類的一些常用方法:
| 序號 | 方法和描述 |
|---|---|
| 1 |
Dispose 向 SMTP 伺服器傳送 QUIT 訊息,優雅地結束 TCP 連線,並釋放當前 SmtpClient 類例項使用的所有資源。 |
| 2 |
Dispose(Boolean) 向 SMTP 伺服器傳送 QUIT 訊息,優雅地結束 TCP 連線,釋放當前 SmtpClient 類例項使用的所有資源,並可選地釋放託管資源。 |
| 3 |
OnSendCompleted 引發 SendCompleted 事件。 |
| 4 |
Send(MailMessage) 將指定的訊息傳送到 SMTP 伺服器以進行傳遞。 |
| 5 |
Send(String, String, String, String) 將指定的電子郵件訊息傳送到 SMTP 伺服器以進行傳遞。使用 String 物件指定訊息發件人、收件人、主題和訊息正文。 |
| 6 |
SendAsync(MailMessage, Object) 將指定的電子郵件訊息傳送到 SMTP 伺服器以進行傳遞。此方法不會阻塞呼叫執行緒,並允許呼叫方將一個物件傳遞到操作完成時呼叫的方法。 |
| 7 |
SendAsync(String, String, String, String, Object) 將電子郵件訊息傳送到 SMTP 伺服器以進行傳遞。使用 String 物件指定訊息發件人、收件人、主題和訊息正文。此方法不會阻塞呼叫執行緒,並允許呼叫方將一個物件傳遞到操作完成時呼叫的方法。 |
| 8 |
SendAsyncCancel 取消非同步操作以傳送電子郵件。 |
| 9 |
SendMailAsync(MailMessage) 將指定的訊息作為非同步操作傳送到 SMTP 伺服器以進行傳遞。 |
| 10 |
SendMailAsync(String, String, String, String) 將指定的訊息作為非同步操作傳送到 SMTP 伺服器以進行傳遞。使用 String 物件指定訊息發件人、收件人、主題和訊息正文。 |
| 11 |
ToString 返回表示當前物件的字串。 |
以下示例演示如何使用 SmtpClient 類傳送郵件。在這方面需要注意以下幾點:
您必須指定用於傳送電子郵件的 SMTP 主機伺服器。不同主機伺服器的Host和Port屬性將有所不同。我們將使用 gmail 伺服器。
如果 SMTP 伺服器需要,您需要提供用於身份驗證的Credentials。
您還應分別使用MailMessage.From和MailMessage.To屬性提供發件人的電子郵件地址和收件人的電子郵件地址。
您還應使用MailMessage.Body屬性指定訊息內容。
示例
在此示例中,讓我們建立一個簡單的應用程式來發送電子郵件。請按照以下步驟操作:
在窗體中新增三個標籤、三個文字框和一個按鈕控制元件。
將標籤的文字屬性分別更改為“發件人”、“收件人:”和“訊息:”。
將文字的名稱屬性分別更改為 txtFrom、txtTo 和 txtMessage。
將按鈕控制元件的文字屬性更改為“傳送”。
在程式碼編輯器中新增以下程式碼。
Imports System.Net.Mail
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Set the caption bar text of the form.
Me.Text = "tutorialspoint.com"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
Dim Smtp_Server As New SmtpClient
Dim e_mail As New MailMessage()
Smtp_Server.UseDefaultCredentials = False
Smtp_Server.Credentials = New Net.NetworkCredential("username@gmail.com", "password")
Smtp_Server.Port = 587
Smtp_Server.EnableSsl = True
Smtp_Server.Host = "smtp.gmail.com"
e_mail = New MailMessage()
e_mail.From = New MailAddress(txtFrom.Text)
e_mail.To.Add(txtTo.Text)
e_mail.Subject = "Email Sending"
e_mail.IsBodyHtml = False
e_mail.Body = txtMessage.Text
Smtp_Server.Send(e_mail)
MsgBox("Mail Sent")
Catch error_t As Exception
MsgBox(error_t.ToString)
End Try
End Sub
您必須提供您的 gmail 地址和真實密碼作為憑據。
當使用 Microsoft Visual Studio 工具欄中的啟動按鈕執行並執行上述程式碼時,將顯示以下視窗,您可以使用它來發送電子郵件,請自己嘗試。
VB.Net - XML處理
可擴充套件標記語言 (XML) 是一種類似於 HTML 或 SGML 的標記語言。這是全球資訊網聯盟推薦的開放標準。
.Net Framework 中的System.Xml名稱空間包含用於處理 XML 文件的類。以下是 System.Xml 名稱空間中的一些常用類。
| 序號 | 類和描述 |
|---|---|
| 1 |
XmlAttribute 表示一個屬性。屬性的有效值和預設值在文件型別定義 (DTD) 或模式中定義。 |
| 2 | XmlCDataSection 表示 CDATA 部分。 |
| 3 | XmlCharacterData 提供由多個類使用的文字操作方法。 |
| 4 | XmlComment 表示 XML 註釋的內容。 |
| 5 | XmlConvert 編碼和解碼 XML 名稱,並提供在公共語言執行時型別和 XML 架構定義語言 (XSD) 型別之間轉換的方法。轉換資料型別時,返回的值與區域設定無關。 |
| 6 | XmlDeclaration 表示 XML 宣告節點 <?xml version='1.0'...?>。 |
| 7 | XmlDictionary 實現一個字典,用於最佳化 Windows Communication Foundation (WCF) 的 XML 讀取器/寫入器實現。 |
| 8 | XmlDictionaryReader Windows Communication Foundation (WCF) 從 XmlReader 派生的抽象類,用於進行序列化和反序列化。 |
| 9 |
XmlDictionaryWriter 表示 Windows Communication Foundation (WCF) 從 XmlWriter 派生的抽象類,用於進行序列化和反序列化。 |
| 10 | XmlDocument 表示 XML 文件。 |
| 11 | XmlDocumentFragment 表示一個輕量級物件,用於樹插入操作。 |
| 12 | XmlDocumentType 表示文件型別宣告。 |
| 13 | XmlElement 表示一個元素。 |
| 14 | XmlEntity 表示實體宣告,例如 <!ENTITY... >。 |
| 15 | XmlEntityReference 表示一個實體引用節點。 |
| 16 | XmlException 返回有關上次異常的詳細資訊。 |
| 17 | XmlImplementation 定義一組 XmlDocument 物件的上下文。 |
| 18 | XmlLinkedNode 獲取緊接在此節點之前或之後的節點。 |
| 19 | XmlNode 表示XML文件中的單個節點。 |
| 20 | XmlNodeList 表示節點的有序集合。 |
| 21 | XmlNodeReader 表示一個讀取器,它提供對 XmlNode 中 XML 資料的快速、非快取的、僅向前訪問。 |
| 22 | XmlNotation 表示符號宣告,例如 <!NOTATION... >。 |
| 23 | XmlParserContext 提供 XmlReader 解析 XML 片段所需的所有上下文資訊。 |
| 24 | XmlProcessingInstruction 表示處理指令,XML 定義它用於在文件文字中保留處理器特定資訊。 |
| 25 | XmlQualifiedName 表示 XML 限定名稱。 |
| 26 | XmlReader 表示一個讀取器,它提供對 XML 資料的快速、非快取的、僅向前訪問。 |
| 27 | XmlReaderSettings 指定由 Create 方法建立的 XmlReader 物件支援的一組功能。 |
| 28 | XmlResolver 解析由統一資源識別符號 (URI) 命名的外部 XML 資源。 |
| 29 | XmlSecureResolver 透過包裝 XmlResolver 物件並限制底層 XmlResolver 可以訪問的資源來幫助保護 XmlResolver 的另一個實現。 |
| 30 | XmlSignificantWhitespace 表示混合內容節點中標記之間的空白,或 xml:space='preserve' 範圍內的空白。這也稱為有效空白。 |
| 31 | XmlText 表示元素或屬性的文字內容。 |
| 32 | XmlTextReader 表示一個讀取器,它提供對 XML 資料的快速、非快取的、僅向前訪問。 |
| 33 | XmlTextWriter 表示一個寫入器,它提供一種快速、非快取的、僅向前的方式來生成包含符合 W3C 可擴充套件標記語言 (XML) 1.0 和 XML 中的名稱空間建議的 XML 資料的流或檔案。 |
| 34 | XmlUrlResolver 解析由統一資源識別符號 (URI) 命名的外部 XML 資源。 |
| 35 | XmlWhitespace 表示元素內容中的空白。 |
| 36 | XmlWriter 表示一個寫入器,它提供一種快速、非快取的、僅向前的方式來生成包含 XML 資料的流或檔案。 |
| 37 | XmlWriterSettings 指定 XmlWriter.Create 方法建立的 XmlWriter 物件支援的一組功能。 |
XML 解析器 API
用於 XML 資料的兩個最基本且使用最廣泛的 API 是 SAX 和 DOM 介面。
用於 XML 的簡單 API (SAX) − 在這裡,您為感興趣的事件註冊回撥,然後讓解析器遍歷文件。當您的文件很大或記憶體有限時,這非常有用,它在從磁碟讀取檔案時解析檔案,並且整個檔案永遠不會儲存在記憶體中。
文件物件模型 (DOM) API − 這是全球資訊網聯盟的建議,其中整個檔案被讀取到記憶體中並存儲在分層(基於樹)的形式中,以表示 XML 文件的所有功能。
處理大型檔案時,SAX 的處理速度顯然不如 DOM 快。另一方面,僅使用 DOM 會嚴重消耗您的資源,尤其是在處理大量小檔案時。
SAX 是隻讀的,而 DOM 允許更改 XML 檔案。由於這兩個不同的 API 實際上是互補的,因此沒有理由不將它們都用於大型專案。
對於我們所有的 XML 程式碼示例,讓我們使用一個簡單的 XML 檔案 movies.xml 作為輸入 −
<?xml version = "1.0"?>
<collection shelf = "New Arrivals">
<movie title = "Enemy Behind">
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>10</stars>
<description>Talk about a US-Japan war</description>
</movie>
<movie title = "Transformers">
<type>Anime, Science Fiction</type>
<format>DVD</format>
<year>1989</year>
<rating>R</rating>
<stars>8</stars>
<description>A schientific fiction</description>
</movie>
<movie title = "Trigun">
<type>Anime, Action</type>
<format>DVD</format>
<episodes>4</episodes>
<rating>PG</rating>
<stars>10</stars>
<description>Vash the Stampede!</description>
</movie>
<movie title = "Ishtar">
<type>Comedy</type>
<format>VHS</format>
<rating>PG</rating>
<stars>2</stars>
<description>Viewable boredom</description>
</movie>
</collection>
使用 SAX API 解析 XML
在 SAX 模型中,您使用XmlReader 和XmlWriter 類來處理 XML 資料。
XmlReader 類用於以快速、僅向前和非快取的方式讀取 XML 資料。它讀取 XML 文件或流。
示例 1
此示例演示如何從 movies.xml 檔案讀取 XML 資料。
請按照以下步驟操作:
將 movies.xml 檔案新增到應用程式的 bin\Debug 資料夾中。
在 Form1.vb 檔案中匯入 System.Xml 名稱空間。
在窗體中新增一個標籤,並將它的文字更改為“Movies Galore”。
新增三個列表框和三個按鈕,以顯示來自 xml 檔案的電影標題、型別和描述。
使用程式碼編輯器視窗新增以下程式碼。
Imports System.Xml
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Set the caption bar text of the form.
Me.Text = "tutorialspoint.com"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ListBox1().Items.Clear()
Dim xr As XmlReader = XmlReader.Create("movies.xml")
Do While xr.Read()
If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "movie" Then
ListBox1.Items.Add(xr.GetAttribute(0))
End If
Loop
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
ListBox2().Items.Clear()
Dim xr As XmlReader = XmlReader.Create("movies.xml")
Do While xr.Read()
If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "type" Then
ListBox2.Items.Add(xr.ReadElementString)
Else
xr.Read()
End If
Loop
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
ListBox3().Items.Clear()
Dim xr As XmlReader = XmlReader.Create("movies.xml")
Do While xr.Read()
If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "description" Then
ListBox3.Items.Add(xr.ReadElementString)
Else
xr.Read()
End If
Loop
End Sub
End Class
使用 Microsoft Visual Studio 工具欄上的啟動按鈕執行並執行上述程式碼。單擊按鈕將顯示來自檔案電影的標題、型別和描述。
XmlWriter 類用於將 XML 資料寫入流、檔案或 TextWriter 物件。它也以僅向前、非快取的方式工作。
示例 2
讓我們透過在執行時新增一些資料來建立一個 XML 檔案。請按照以下步驟操作 −
在窗體中新增一個 WebBrowser 控制元件和一個按鈕控制元件。
將按鈕的 Text 屬性更改為“顯示作者檔案”。
在程式碼編輯器中新增以下程式碼。
Imports System.Xml
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Set the caption bar text of the form.
Me.Text = "tutorialspoint.com"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim xws As XmlWriterSettings = New XmlWriterSettings()
xws.Indent = True
xws.NewLineOnAttributes = True
Dim xw As XmlWriter = XmlWriter.Create("authors.xml", xws)
xw.WriteStartDocument()
xw.WriteStartElement("Authors")
xw.WriteStartElement("author")
xw.WriteAttributeString("code", "1")
xw.WriteElementString("fname", "Zara")
xw.WriteElementString("lname", "Ali")
xw.WriteEndElement()
xw.WriteStartElement("author")
xw.WriteAttributeString("code", "2")
xw.WriteElementString("fname", "Priya")
xw.WriteElementString("lname", "Sharma")
xw.WriteEndElement()
xw.WriteStartElement("author")
xw.WriteAttributeString("code", "3")
xw.WriteElementString("fname", "Anshuman")
xw.WriteElementString("lname", "Mohan")
xw.WriteEndElement()
xw.WriteStartElement("author")
xw.WriteAttributeString("code", "4")
xw.WriteElementString("fname", "Bibhuti")
xw.WriteElementString("lname", "Banerjee")
xw.WriteEndElement()
xw.WriteStartElement("author")
xw.WriteAttributeString("code", "5")
xw.WriteElementString("fname", "Riyan")
xw.WriteElementString("lname", "Sengupta")
xw.WriteEndElement()
xw.WriteEndElement()
xw.WriteEndDocument()
xw.Flush()
xw.Close()
WebBrowser1.Url = New Uri(AppDomain.CurrentDomain.BaseDirectory + "authors.xml")
End Sub
End Class
使用 Microsoft Visual Studio 工具欄上的啟動按鈕執行並執行上述程式碼。單擊“顯示作者檔案”將顯示在 Web 瀏覽器上新建立的 authors.xml 檔案。
使用 DOM API 解析 XML
根據文件物件模型 (DOM),XML 文件由節點和節點的屬性組成。XmlDocument 類用於實現 .Net Framework 的 XML DOM 解析器。它還允許您透過插入、刪除或更新文件中的資料來修改現有的 XML 文件。
以下是XmlDocument 類的一些常用方法 −
| 序號 | 方法名稱和描述 |
|---|---|
| 1 |
AppendChild 將指定的節點新增到此節點的子節點列表的末尾。 |
| 2 |
CreateAttribute(String) 建立一個具有指定名稱的 XmlAttribute。 |
| 3 |
CreateComment 建立一個包含指定資料的 XmlComment。 |
| 4 |
CreateDefaultAttribute 建立一個具有指定字首、區域性名稱和名稱空間 URI 的預設屬性。 |
| 5 |
CreateElement(String) 建立一個具有指定名稱的元素。 |
| 6 |
CreateNode(String, String, String) 建立一個具有指定節點型別、名稱和 NamespaceURI 的 XmlNode。 |
| 7 |
CreateNode(XmlNodeType, String, String) 建立一個具有指定 XmlNodeType、名稱和 NamespaceURI 的 XmlNode。 |
| 8 |
CreateNode(XmlNodeType, String, String, String) 建立一個具有指定 XmlNodeType、字首、名稱和 NamespaceURI 的 XmlNode。 |
| 9 |
CreateProcessingInstruction 建立一個具有指定名稱和資料的 XmlProcessingInstruction。 |
| 10 |
CreateSignificantWhitespace 建立一個 XmlSignificantWhitespace 節點。 |
| 11 |
CreateTextNode 建立一個具有指定文字的 XmlText。 |
| 12 |
CreateWhitespace 建立一個 XmlWhitespace 節點。 |
| 13 |
CreateXmlDeclaration 建立一個具有指定值的 XmlDeclaration 節點。 |
| 14 |
GetElementById 獲取具有指定 ID 的 XmlElement。 |
| 15 |
GetElementsByTagName(String) 返回一個 XmlNodeList,其中包含與指定名稱匹配的所有後代元素的列表。 |
| 16 |
GetElementsByTagName(String, String) 返回一個 XmlNodeList,其中包含與指定 LocalName 和 NamespaceURI 匹配的所有後代元素的列表。 |
| 17 |
InsertAfter 將指定的節點插入到指定的參考節點之後。 |
| 18 |
InsertBefore 將指定的節點插入到指定的參考節點之前。 |
| 19 |
Load(Stream) 從指定的流載入 XML 文件。 |
| 20 |
Load(String) 從指定的 URL 載入 XML 文件。 |
| 21 |
Load(TextReader) 從指定的 TextReader 載入 XML 文件。 |
| 22 |
Load(XmlReader) 從指定的 XmlReader 載入 XML 文件。 |
| 23 |
LoadXml 從指定的字串載入 XML 文件。 |
| 24 |
PrependChild 將指定的節點新增到此節點的子節點列表的開頭。 |
| 25 |
ReadNode 基於 XmlReader 中的資訊建立一個 XmlNode 物件。讀取器必須位於節點或屬性上。 |
| 26 |
RemoveAll 刪除當前節點的所有子節點和/或屬性。 |
| 27 |
RemoveChild 刪除指定的子節點。 |
| 28 |
ReplaceChild 用 newChild 節點替換 childChild 節點。 |
| 29 |
Save(Stream) 將 XML 文件儲存到指定的流。 |
| 30 |
Save(String) 將 XML 文件儲存到指定的檔案。 |
| 31 |
Save(TextWriter) 將 XML 文件儲存到指定的 TextWriter。 |
| 32 |
Save(XmlWriter) 將 XML 文件儲存到指定的 XmlWriter。 |
示例 3
在此示例中,讓我們在 xml 文件 authors.xml 中插入一些新節點,然後在列表框中顯示所有作者的姓名。
請按照以下步驟操作:
將 authors.xml 檔案新增到應用程式的 bin/Debug 資料夾中(如果您嘗試過上一個示例,則應該存在)。
匯入 System.Xml 名稱空間
在窗體中新增一個列表框和一個按鈕控制元件,並將按鈕控制元件的 Text 屬性設定為“顯示作者”。
使用程式碼編輯器新增以下程式碼。
Imports System.Xml
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Set the caption bar text of the form.
Me.Text = "tutorialspoint.com"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ListBox1.Items.Clear()
Dim xd As XmlDocument = New XmlDocument()
xd.Load("authors.xml")
Dim newAuthor As XmlElement = xd.CreateElement("author")
newAuthor.SetAttribute("code", "6")
Dim fn As XmlElement = xd.CreateElement("fname")
fn.InnerText = "Bikram"
newAuthor.AppendChild(fn)
Dim ln As XmlElement = xd.CreateElement("lname")
ln.InnerText = "Seth"
newAuthor.AppendChild(ln)
xd.DocumentElement.AppendChild(newAuthor)
Dim tr As XmlTextWriter = New XmlTextWriter("movies.xml", Nothing)
tr.Formatting = Formatting.Indented
xd.WriteContentTo(tr)
tr.Close()
Dim nl As XmlNodeList = xd.GetElementsByTagName("fname")
For Each node As XmlNode In nl
ListBox1.Items.Add(node.InnerText)
Next node
End Sub
End Class
使用 Microsoft Visual Studio 工具欄上的啟動按鈕執行並執行上述程式碼。單擊“顯示作者”按鈕將顯示所有作者的姓名,包括我們在執行時新增的姓名。
VB.Net - Web程式設計
動態 Web 應用程式包含以下兩種型別的程式之一或兩者 −
伺服器端指令碼 − 這些是在 Web 伺服器上執行的程式,使用伺服器端指令碼語言(如 ASP(Active Server Pages)或 JSP(Java Server Pages))編寫。
客戶端指令碼 − 這些是在瀏覽器上執行的程式,使用指令碼語言(如 JavaScript、VBScript 等)編寫。
ASP.Net 是微軟推出的 ASP 的 .Net 版本,用於透過使用伺服器端指令碼建立動態網頁。ASP.Net 應用程式是使用 .Net Framework 中存在的可擴充套件和可重用元件或物件編寫的已編譯程式碼。這些程式碼可以使用 .Net Framework 中的整個類層次結構。
ASP.Net 應用程式程式碼可以用以下任何一種語言編寫 −
Visual Basic .Net
C#
Jscript
J#
在本節中,我們將簡要介紹如何使用 VB.Net 編寫 ASP.Net 應用程式。有關詳細討論,請參閱ASP.Net 教程。
ASP.Net 內建物件
ASP.Net 有一些在 Web 伺服器上執行的內建物件。這些物件具有在應用程式開發中使用的屬性、方法和集合。
下表列出了 ASP.Net 內建物件及其簡要說明 −
| 序號 | 物件和描述 |
|---|---|
| 1 |
Application 描述物件的屬性、方法和集合,這些物件儲存與整個 Web 應用程式相關的資訊,包括在應用程式生命週期記憶體在的變數和物件。 您可以使用此物件來儲存和檢索要在應用程式的所有使用者之間共享的資訊。例如,您可以使用 Application 物件來建立一個電子商務頁面。 |
| 2 | Request 描述物件的屬性、方法和集合,這些物件儲存與 HTTP 請求相關的資訊。這包括表單、cookie、伺服器變數和證書資料。 您可以使用此物件來訪問從瀏覽器傳送到伺服器的請求中傳送的資訊。例如,您可以使用 Request 物件來訪問使用者在 HTML 表單中輸入的資訊。 |
| 3 | Response 描述物件的屬性、方法和集合,這些物件儲存與伺服器響應相關的資訊。這包括顯示內容、操作標頭、設定語言環境和重定向請求。 您可以使用此物件將資訊傳送到瀏覽器。例如,您可以使用 Response 物件將指令碼的輸出傳送到瀏覽器。 |
| 4 | Server 描述物件的屬性和方法,這些物件提供各種伺服器任務的方法。使用這些方法,您可以執行程式碼、獲取錯誤條件、編碼文字字串、建立供網頁使用的物件以及對映物理路徑。 您可以使用此物件訪問伺服器上的各種實用程式函式。例如,您可以使用 Server 物件為指令碼設定超時。 |
| 5 | 會話 (Session) 描述儲存與使用者會話相關資訊的物件的方法、屬性和集合,包括在會話生命週期記憶體在的變數和物件。 您可以使用此物件來儲存和檢索有關特定使用者會話的資訊。例如,您可以使用 Session 物件來儲存有關使用者及其偏好的資訊,並跟蹤未完成的操作。 |
ASP.Net程式設計模型
ASP.Net 提供兩種程式設計模型:
Web 窗體 - 這使您可以建立使用者介面和應用於使用者介面各個元件的應用程式邏輯。
WCF 服務 - 這使您可以遠端訪問某些伺服器端功能。
在本節中,您需要使用 Visual Studio Web Developer,它是免費的。此 IDE 與您之前用於建立 Windows 應用程式的 IDE 幾乎相同。
Web 窗體
Web 窗體包含:
使用者介面
應用程式邏輯
使用者介面由靜態 HTML 或 XML 元素和 ASP.Net 伺服器控制元件組成。建立 Web 應用程式時,HTML 或 XML 元素和伺服器控制元件儲存在副檔名為.aspx的檔案中。此檔案也稱為頁面檔案。
應用程式邏輯包含應用於頁面中使用者介面元素的程式碼。您可以使用任何 .Net 語言(如 VB.Net 或 C#)編寫此程式碼。下圖顯示了設計檢視中的 Web 窗體:
示例
讓我們建立一個包含 Web 窗體的新網站,該窗體將在使用者單擊按鈕時顯示當前日期和時間。請按照以下步驟操作:
選擇 檔案 → 新建 → 網站。將出現“新建網站”對話方塊。
選擇 ASP.Net 空網站模板。鍵入網站名稱並選擇儲存檔案的路徑。
您需要向網站新增一個預設頁面。右鍵單擊解決方案資源管理器中的網站名稱,然後從上下文選單中選擇“新增新項”選項。將顯示“新增新項”對話方塊:
選擇 Web 窗體選項,併為預設頁面提供名稱。我們將其命名為 Default.aspx。單擊“新增”按鈕。
預設頁面在源檢視中顯示。
透過在源檢視中向頁面的<Title>標記新增值來設定預設 Web 頁面的標題:
若要在 Web 頁面上新增控制元件,請轉到設計檢視。在窗體上新增三個標籤、一個文字框和一個按鈕。
雙擊該按鈕,並將以下程式碼新增到該按鈕的 Click 事件中:
Protected Sub Button1_Click(sender As Object, e As EventArgs) _ Handles Button1.Click Label2.Visible = True Label2.Text = "Welcome to Tutorials Point: " + TextBox1.Text Label3.Text = "You visited us at: " + DateTime.Now.ToString() End Sub
使用 Microsoft Visual Studio 工具欄上的“啟動”按鈕執行並執行上述程式碼後,瀏覽器中將開啟以下頁面:
輸入您的姓名,然後單擊“提交”按鈕:
Web 服務
Web 服務是一個 Web 應用程式,它基本上是一個類,包含可供其他應用程式使用的方法。它也遵循類似於 ASP.Net 網頁的程式碼隱藏架構,儘管它沒有使用者介面。
.Net Framework 的早期版本使用了這種 ASP.Net Web 服務的概念,其副檔名為 .asmx。但是,從 .Net Framework 4.0 開始,Windows Communication Foundation (WCF) 技術已發展成為 Web 服務、.Net Remoting 和其他一些相關技術的新的繼承者。它實際上將所有這些技術整合在一起。在下一節中,我們將簡要介紹 Windows Communication Foundation (WCF)。
如果您使用的是早期版本的 .Net Framework,您仍然可以建立傳統的 Web 服務。請參閱ASP.Net - Web 服務教程以獲取詳細說明。
Windows Communication Foundation
Windows Communication Foundation 或 WCF 提供了一個 API,用於建立稱為 WCF 服務的分散式面向服務的應用程式。
與 Web 服務一樣,WCF 服務也支援應用程式之間的通訊。但是,與 Web 服務不同的是,這裡的通訊並不僅限於 HTTP。WCF 可以配置為透過 HTTP、TCP、IPC 和訊息佇列使用。WCF 的另一個優點是,它支援雙工通訊,而 Web 服務只能實現單工通訊。
從初學者的角度來看,編寫 WCF 服務與編寫 Web 服務並沒有什麼不同。為了簡化操作,我們將瞭解如何:
建立 WCF 服務
建立服務契約並定義操作
實現契約
測試服務
利用服務
示例
為了理解這個概念,讓我們建立一個簡單的服務,它將提供股票價格資訊。客戶端可以根據股票程式碼查詢股票的名稱和價格。為了簡化此示例,值硬編碼在一個二維陣列中。此服務將具有兩種方法:
GetPrice 方法 - 它將根據提供的程式碼返回股票的價格。
GetName 方法 - 它將根據提供的程式碼返回股票的名稱。
建立 WCF 服務
請按照以下步驟操作:
開啟 VS Express for Web 2012
選擇“新建網站”以開啟“新建網站”對話方塊。
從模板列表中選擇 WCF 服務模板:
從“Web 位置”下拉列表中選擇“檔案系統”。
為 WCF 服務提供名稱和位置,然後單擊“確定”。
將建立一個新的 WCF 服務。
建立服務契約並定義操作
服務契約定義服務執行的操作。在 WCF 服務應用程式中,您會發現解決方案資源管理器中的 App_Code 資料夾中自動建立了兩個檔案。
IService.vb - 這將包含服務契約;簡單來說,它將包含服務的介面,其中包含服務將提供的方法的定義,您將在服務中實現這些方法。
Service.vb - 這將實現服務契約。
將 IService.vb 檔案的程式碼替換為給定的程式碼:
Public Interface IService <OperationContract()> Function GetPrice(ByVal symbol As String) As Double <OperationContract()> Function GetName(ByVal symbol As String) As String End Interface
實現契約
在 Service.vb 檔案中,您會找到一個名為Service的類,它將實現IService介面中定義的服務契約。
將 IService.vb 的程式碼替換為以下程式碼:
' NOTE: You can use the "Rename" command on the context menu to change the class name "Service" in code, svc and config file together.
Public Class Service
Implements IService
Public Sub New()
End Sub
Dim stocks As String(,) =
{
{"RELIND", "Reliance Industries", "1060.15"},
{"ICICI", "ICICI Bank", "911.55"},
{"JSW", "JSW Steel", "1201.25"},
{"WIPRO", "Wipro Limited", "1194.65"},
{"SATYAM", "Satyam Computers", "91.10"}
}
Public Function GetPrice(ByVal symbol As String) As Double _
Implements IService.GetPrice
Dim i As Integer
'it takes the symbol as parameter and returns price
For i = 0 To i = stocks.GetLength(0) - 1
If (String.Compare(symbol, stocks(i, 0)) = 0) Then
Return Convert.ToDouble(stocks(i, 2))
End If
Next i
Return 0
End Function
Public Function GetName(ByVal symbol As String) As String _
Implements IService.GetName
' It takes the symbol as parameter and
' returns name of the stock
Dim i As Integer
For i = 0 To i = stocks.GetLength(0) - 1
If (String.Compare(symbol, stocks(i, 0)) = 0) Then
Return stocks(i, 1)
End If
Next i
Return "Stock Not Found"
End Function
End Class
測試服務
要執行建立的 WCF 服務,請選擇選單欄中的除錯 → 啟動除錯選項。輸出將是:
要測試服務操作,請雙擊左側窗格中操作的名稱。右側窗格中將出現一個新選項卡。
在右側窗格的“請求”區域中輸入引數值,然後單擊“呼叫”按鈕。
下圖顯示了測試GetPrice操作的結果:
下圖顯示了測試GetName操作的結果:
利用服務
讓我們在同一個解決方案中新增一個預設頁面(一個 ASP.NET Web 窗體),我們將從中使用剛剛建立的 WCF 服務。
請按照以下步驟操作:
右鍵單擊解決方案資源管理器中的解決方案名稱,然後向解決方案新增新的 Web 窗體。它將被命名為 Default.aspx。
在窗體上新增兩個標籤、一個文字框和一個按鈕。
我們需要向剛剛建立的 WCF 服務新增服務引用。右鍵單擊解決方案資源管理器中的網站,然後選擇“新增服務引用”選項。這將開啟“新增服務引用”對話方塊。
在“地址”文字框中輸入服務的 URL(位置),然後單擊“轉到”按鈕。它將建立一個預設名稱為ServiceReference1的服務引用。單擊“確定”按鈕。
新增引用將為您的專案完成兩項工作:
在 web.config 檔案中建立服務的地址和繫結。
建立一個代理類來訪問服務。
雙擊窗體中的“獲取價格”按鈕,在其 Click 事件中輸入以下程式碼片段:
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click
Dim ser As ServiceReference1.ServiceClient = _
New ServiceReference1.ServiceClient
Label2.Text = ser.GetPrice(TextBox1.Text).ToString()
End Sub
End Class
使用 Microsoft Visual Studio 工具欄上的“啟動”按鈕執行並執行上述程式碼後,瀏覽器中將開啟以下頁面:
輸入一個程式碼,然後單擊“獲取價格”按鈕以獲取硬編碼的價格: