VB.NET 基本資料類型 筆記(核心篇)
資料類型用來決定變數可以保存什麼資料,也決定資料能做什麼運算。數量適合用整數,金額適合用 Decimal,日期應使用 Date,文字則依照單一字元或整段內容選擇 Char 或 String。
型別不是單純語法名稱,而是資料設計的第一步。型別選得清楚,後續的輸入檢查、計算、格式化與維護都會更穩定。這篇以 Windows Forms 範例整理 Boolean、Integer、Decimal、String、Char 與 Date 的使用方式。
先理解資料類型在做什麼
型別讓資料有明確用途
每個變數都應該符合資料本質。若資料只有是或否,適合使用 Boolean;若資料要做金額計算,適合使用 Decimal;若資料要進行日期加減,適合使用 Date。
- 資料能不能計算:數值型別可以運算,文字型別主要用於內容處理。
- 資料是否需要小數:件數通常是
Integer,金額通常是Decimal。 - 資料是否只有兩種狀態:是或否、開或關,適合
Boolean。 - 資料是否需要日期規則:到期日、預約日、截止時間,適合
Date。
| 型別 | 適合資料 | 常見用途 |
|---|---|---|
| Boolean | True / False |
是否啟用、是否完成、是否勾選。 |
| Integer | 沒有小數的整數。 | 人數、數量、次數、索引。 |
| Decimal | 需要精確的小數。 | 金額、費用、折扣、報表數值。 |
| String | 一段文字。 | 姓名、說明、訊息、代碼字串。 |
| Char | 單一字元。 | 等級字母、分類代碼、單一符號。 |
| Date | 日期與時間。 | 預約日、到期日、建立時間、截止時間。 |
基本宣告範例
VB.NET
Dim isReady As Boolean = True
Dim visitorCount As Integer = 35
Dim feeAmount As Decimal = 120.5D
Dim displayName As String = "閱讀區 A"
Dim levelCode As Char = "B"c
Dim reserveDate As Date = Date.Today
Boolean:兩種狀態的判斷
場景一:自助影印機是否可使用
Boolean 適合表示只有兩種結果的狀態。這個範例用紙張與機門狀態判斷影印機是否可使用。
需要的主控項
CheckBoxHasPaper:是否有紙。CheckBoxDoorClosed:機門是否關閉。ButtonCheckMachine:檢查影印機狀態。LabelMachineStatus:顯示結果。
範例程式碼
VB.NET / Windows Forms
Public Class Form1
Private Sub ButtonCheckMachine_Click(sender As Object, e As EventArgs) Handles ButtonCheckMachine.Click
Dim hasPaper As Boolean = CheckBoxHasPaper.Checked
Dim doorClosed As Boolean = CheckBoxDoorClosed.Checked
Dim canCopy As Boolean = hasPaper AndAlso doorClosed
If canCopy Then
LabelMachineStatus.Text = "影印機狀態:可使用"
Else
LabelMachineStatus.Text = "影印機狀態:請確認紙張與機門"
End If
End Sub
End Class
畫面輸出結果(兩個 CheckBox 都勾選)
影印機狀態:可使用邏輯解析
CheckBox.Checked本身就是Boolean。AndAlso表示兩個條件都成立,結果才是True。- 若狀態超過兩種,例如待機、缺紙、維修中,通常更適合改用
Enum。
Integer:沒有小數的數量
場景二:講座剩餘座位計算
Integer 適合人數、件數與次數。這個範例用座位總數與已報名人數計算剩餘座位。
需要的主控項
TextBoxRegistered:輸入已報名人數。ButtonCheckSeats:計算剩餘座位。LabelSeatResult:顯示結果。
範例程式碼
VB.NET / Windows Forms
Public Class Form1
Private Sub ButtonCheckSeats_Click(sender As Object, e As EventArgs) Handles ButtonCheckSeats.Click
Dim totalSeats As Integer = 48
Dim registeredCount As Integer
If Not Integer.TryParse(TextBoxRegistered.Text.Trim(), registeredCount) Then
LabelSeatResult.Text = "請輸入正確人數"
Return
End If
If registeredCount < 0 OrElse registeredCount > totalSeats Then
LabelSeatResult.Text = "報名人數超出合理範圍"
Return
End If
Dim remainingSeats As Integer = totalSeats - registeredCount
LabelSeatResult.Text = "剩餘座位:" & remainingSeats.ToString() & " 位"
End Sub
End Class
畫面輸出結果(TextBoxRegistered = 31)
剩餘座位:17 位邏輯解析
- 座位數與人數沒有小數,適合使用
Integer。 Integer.TryParse可避免輸入非數字時直接發生例外。- 輸入成功後再檢查範圍,可讓錯誤訊息更明確。
Decimal:金額與精確小數
場景三:列印服務費用試算
只要資料涉及金額、費用或精確小數,通常優先考慮 Decimal。這個範例依照頁數與單頁費用計算列印總額。
需要的主控項
TextBoxPageCount:輸入列印頁數。ButtonCalculateFee:計算費用。LabelFee:顯示結果。
範例程式碼
VB.NET / Windows Forms
Public Class Form1
Private Sub ButtonCalculateFee_Click(sender As Object, e As EventArgs) Handles ButtonCalculateFee.Click
Dim pageCount As Integer
If Not Integer.TryParse(TextBoxPageCount.Text.Trim(), pageCount) OrElse pageCount <= 0 Then
LabelFee.Text = "請輸入大於 0 的頁數"
Return
End If
Dim pricePerPage As Decimal = 1.5D
Dim bindingFee As Decimal = 12D
Dim totalFee As Decimal = pageCount * pricePerPage + bindingFee
LabelFee.Text = "列印費用:" & totalFee.ToString("N1") & " 元"
End Sub
End Class
畫面輸出結果(TextBoxPageCount = 26)
列印費用:51.0 元邏輯解析
pricePerPage與bindingFee使用Decimal。- 數值後方的
D代表 Decimal 常值。 ToString("N1")會顯示千分位並保留一位小數。
金額計算建議:價格、費用、折扣與報表金額通常使用 Decimal。一般浮點型別較適合科學計算或量測資料,不適合作為金額核心計算的第一選擇。
String 與 Char:文字與單一字元
場景四:置物櫃代碼顯示
String 用來保存一段文字,Char 用來保存單一字元。這個範例用區域字母與櫃號組合成置物櫃代碼。
需要的主控項
TextBoxLockerNo:輸入櫃號。ButtonBuildLockerCode:建立置物櫃代碼。LabelLocker:顯示結果。
範例程式碼
VB.NET / Windows Forms
Public Class Form1
Private Sub ButtonBuildLockerCode_Click(sender As Object, e As EventArgs) Handles ButtonBuildLockerCode.Click
Dim areaCode As Char = "C"c
Dim lockerNo As String = TextBoxLockerNo.Text.Trim()
If lockerNo = String.Empty Then
LabelLocker.Text = "請輸入櫃號"
Return
End If
Dim lockerCode As String = areaCode & "-" & lockerNo.PadLeft(3, "0"c)
LabelLocker.Text = "置物櫃代碼:" & lockerCode
End Sub
End Class
畫面輸出結果(TextBoxLockerNo = 8)
置物櫃代碼:C-008邏輯解析
"C"c是Char,代表單一字元。lockerNo是String,適合保存輸入文字。PadLeft(3, "0"c)會把櫃號補成三位數。
Date:日期與時間
場景五:借閱到期日計算
日期不應只當成字串處理。使用 Date 後,可以直接加天數、比較日期,也能格式化成需要的顯示樣式。
需要的主控項
DateTimePickerBorrow:選擇借閱日期。ButtonShowDueDate:計算到期日。LabelDueDate:顯示結果。
範例程式碼
VB.NET / Windows Forms
Public Class Form1
Private Sub ButtonShowDueDate_Click(sender As Object, e As EventArgs) Handles ButtonShowDueDate.Click
Dim borrowDate As Date = DateTimePickerBorrow.Value.Date
Dim dueDate As Date = borrowDate.AddDays(14)
LabelDueDate.Text = "借閱日:" & borrowDate.ToString("yyyy-MM-dd") & vbCrLf &
"到期日:" & dueDate.ToString("yyyy-MM-dd")
End Sub
End Class
畫面輸出結果(借閱日 = 2025-04-18)
借閱日:2025-04-18
到期日:2025-05-02邏輯解析
DateTimePicker.Value.Date取得日期部分。AddDays(14)直接計算 14 天後的日期。ToString("yyyy-MM-dd")控制日期顯示格式。
綜合應用:輸入轉型與驗證
場景六:講座報名資料檢查
Windows Forms 的 TextBox 內容一開始都是文字。若要把輸入轉成數字或日期,應先用 TryParse 檢查是否能轉換,再進行後續計算。
需要的主控項
TextBoxName:輸入姓名。TextBoxPeople:輸入報名人數。TextBoxDonate:輸入自願贊助金額。DateTimePickerVisit:選擇參加日期。ButtonValidateSignup:檢查資料。LabelSignupResult:顯示結果。
範例程式碼
VB.NET / Windows Forms
Public Class Form1
Private Sub ButtonValidateSignup_Click(sender As Object, e As EventArgs) Handles ButtonValidateSignup.Click
Dim visitorName As String = TextBoxName.Text.Trim()
If visitorName.Length < 2 Then
LabelSignupResult.Text = "姓名至少需要 2 個字"
Return
End If
Dim peopleCount As Integer
If Not Integer.TryParse(TextBoxPeople.Text.Trim(), peopleCount) OrElse peopleCount <= 0 Then
LabelSignupResult.Text = "報名人數必須是大於 0 的整數"
Return
End If
Dim donateAmount As Decimal
If Not Decimal.TryParse(TextBoxDonate.Text.Trim(), donateAmount) OrElse donateAmount < 0D Then
LabelSignupResult.Text = "贊助金額必須是 0 以上數值"
Return
End If
Dim visitDate As Date = DateTimePickerVisit.Value.Date
LabelSignupResult.Text = "報名完成:" & visitorName & vbCrLf &
"人數:" & peopleCount.ToString() & vbCrLf &
"贊助:" & donateAmount.ToString("N0") & " 元" & vbCrLf &
"日期:" & visitDate.ToString("yyyy-MM-dd")
End Sub
End Class
畫面輸出結果
報名完成:陳小姐
人數:2
贊助:300 元
日期:2025-04-26邏輯解析
TextBoxName.Text是String,適合檢查長度。Integer.TryParse用來轉換報名人數。Decimal.TryParse用來轉換金額。DateTimePickerVisit.Value.Date直接取得Date。- 先轉型與驗證,再進行顯示或計算,流程比較穩定。
實務判斷與常見誤區
常見問題整理
- 把數字都當 String:顯示可以是文字,但計算前應轉成合適數值型別。
- 金額使用浮點型別:金額與精確小數通常優先使用
Decimal。 - 直接轉型使用者輸入:輸入不一定合法,建議使用
TryParse。 - 日期用字串相加:日期應使用
Date與日期方法處理。 - Boolean 承載太多狀態:若狀態超過兩種,通常應改用
Enum。
| 資料情境 | 建議型別 | 原因 |
|---|---|---|
| 是否勾選、是否完成 | Boolean |
只有兩種結果。 |
| 人數、頁數、次數 | Integer |
不需要小數。 |
| 價格、費用、折扣 | Decimal |
需要精確小數。 |
| 姓名、備註、訊息 | String |
長度不固定的文字。 |
| 單一等級字母 | Char |
只保存一個字元。 |
| 到期日、預約時間 | Date |
需要日期運算與格式化。 |
重點整理
- 資料類型會決定變數能保存什麼資料,以及能進行哪些操作。
Boolean適合兩種狀態,例如是或否、開或關。Integer適合沒有小數的數量,例如人數、頁數與次數。Decimal適合金額與精確小數。String適合一段文字,Char適合單一字元。Date適合日期與時間,可直接加減與格式化。- 使用者輸入轉數字時,建議使用
TryParse而不是直接轉型。 - 型別選擇應從資料本質出發,而不是只看目前畫面如何顯示。