1、Visual Basic 程式設計,講師:蔡曉萍 Hptasiarbor.ee.ntu.edu.tw 國立台灣大學電機工程研究所,第三章 變數、運算子與流程控制,變數 運算子 流程控制,3,變數型別,4,變數型別(contd),5,變數,宣告變數 Dim 變數名 As 型別 Ex1. Dim MyName As String Ex2. Dim MyName As String, MyAge As Integer What about “Dim MyName,MyAge As Interger” ? 變數命名規則 以字母開頭(可用中文字) 僅能由字母、數字及底線組成 變數名長度不能超過255字元
2、 不可使用一些特殊符號(型態宣告字元)和句點 ex. %,!,,不建議使用,大家要努力, 苦日子才會過去 :P,6,變數(contd),不能使用關鍵字 Dim, As 在同一個命告範圍(scope)內不得使用相同名稱,7,變數的宣告,Option Explicit Dim i As Integer 1.Dim i As IntegerPrivate Sub Command1_Click()2.Dim i As Integer End SubPrivate Sub Command2_Click() End Sub,在模組內宣告,在函示內宣告,8,變數(contd),下列何者正確? intMyAg
3、em, 38Girl, intMy.Age, 時間, Print, My_課本 Try It!,改改看,看看 VB如何處理,9,變數型別(contd),使用型別代碼:Dim 變數名代碼 Dim intMyAge% 預設型別:Variant 數值型態:16 bytes 字串型態長度:22+字串長度 bytes 字串(String): test=“這是字串” 日期(Date):test=#12/30/1999#,10,隱含宣告,VB可以直接使用未宣告的變數 VB會自動宣告成variant (原Basic的特性) 造成維護不便 打錯字 _ 取消隱含宣告,11,隱含宣告(contd),注意: 只對之後
4、增加 的模組有效,12,變數的有效範圍和生命週期,區域變數 在函式內部使用Dim或Private宣告的變數 只有目前含式看的到 函數執行結束, 區域變數值會跟著結束消失 全域變數 在模組或form內部使用Dim宣告的變數 分用 Public MyCount As Interger 私用 Private MyCount As Interger 靜態變數 Static MyCount as Integer 函數執行結束, 區域變數值會保留,13,變數的有效範圍和生命週期 (contd),Public|Private|Dim|Static 變數名 As 型別 在函式內只能用Private與Dim宣告
5、 在函式內宣告的變數,只在該函式內有效 Ex1.,Option Explicit Private Sub Command1_Click()Dim i As IntegerPrint i End Sub Private Sub Command2_Click()Print i End Sub,Error!,14,變數的有效範圍和生命週期 (contd),Option Explicit Private Sub Command1_Click()Dim i As Integeri=1Print i End SubPrivate Sub Command2_Click()Dim i As Integeri=
6、2Print i End Sub,Ex2.,Ok!,15,新增Form Project/Add Form 顯示另一個Form Form的名字.Show vbModal,Private Sub Command1_Click()Dim i As Integer1.Form2.Show2.Form2.Show vbModal End Sub,變數的有效範圍和生命週期 (contd),16,變數的有效範圍 (contd),Dim a As Integer Private b As Integer Public c As Integer Private Sub Command1_Click()Print
7、 aPrint bPrint c End Sub,Private Sub Command2_Click()1.Print Form1.a2.Print Form1.b3.Print Form1.c End Sub,Form1,Form2,17,變數的有效範圍 (contd),模組一,模組二,Public,Private,Private,Private,Public,Private,比較命名範圍與有效範圍的不同處,18,靜態變數,靜態變數 Static Public|Private 變數名 用於函式內,Private Sub Form1_Click()1.Dim ClickCount As In
8、teger2.Static ClickCount As IntegerClickCount=ClickCount+1Print ClickCount End Sub,Try It!,19,常數,常數=不變的變數如何避免不小心改到? Public|Private Const 變數名 = 初始值,Dim Pi As Single Pi=3.1415926,Const Pi As Single = 3.1415926,20,變數命名規則,範圍: g:在模組中以Public宣告 m:在模組中以Dim或Private宣告 無:在函式中以Dim或Private宣告 型態: 以三個字母代表型態,範圍,資料型
9、態,變數名稱,21,變數命名規則(contd),22,變數命名規則(contd),例: g_intMyAge m_strMyName intMyMoney 變數取名不一定要拘泥於規定,前後一致即可 多人開發:決定變數取名方式,23,Variant,不定型別 用VarType測試,Dim vntVariant vntVariant=0.01 Print VarType(vntVariant) vntVariant=0.01! Print VarType(vntVariant) vntVariant=0.01# Print VarType(vntVariant) vntVariant=“test”
10、 Print VarType(vntVariant),24,Variant(contd),25,Variant(contd),vbEmpty (0) 變數未初始化 型別轉換: CBool, CByte, CInt, CLng, CSng, CDbl intVariable=CInt(vntVariable) 由範圍大的型別轉為範小的型別時,不能超過範圍小的型別的範圍,Dim vntTest Print VarType(vntTest),26,算術運算子,先後順序 -(負數) *,/ Mod +,- &,27,IF Statement,If (比較式) Then程式碼 End If,例: If
11、(year2000) ThenPrint “21世紀” End If,Year2000?,Print,其它程式,是,否,28,IF Statement(contd),If (比較式) Then程式碼1 Else程式碼2 End If,例: If (year2000) ThenPrint “21世紀” ElsePrint “不是21世紀” End If,Year2000?,Print,Print,是,否,其它程式,29,IF Statement(contd),If (比較式1) Then程式碼1 ElseIf (比較式2)程式碼2 Else程式碼3 End If,Year2000?,Print,
12、是,其它程式,例: If (year2000) ThenPrint “21世紀” ElseIf (year=2000) ThenPrint “千禧年 ElsePrint “都不是” End If,Year=2000?,Print,是,否,Print,否,30,比較運算子,運算結果為True或False,31,邏輯運算子,運算結果為True或False,32,比較運算子與邏輯運算子,複合比較式 Ex. (a5 And b4 Or Not c) 一般而言,比較運算子的優先順序大於邏輯運算子 試試看,Private Sub Form_Click()If (True And True) ThenPri
13、nt “True”ElsePrint “False”End If End Sub,33,Select Case Statement,Select Case DayCase 1 If (Day=1)Case 2,3 ElseIf (Day=2 Or Day=3)Case 4 to 10 ElseIf (Day=4 And Day10 ElseIf (Day10)Case Else Else End Select,34,季節判斷,35,使用If,If (Month=1 And Month =1 And Month =1 And Month =1 And Month =3) ThenPrint “冬天” ElsePrint “打錯了”,36,使用Select Case,Select Case MonthCase 1 to 3Print “春天”Case 4 to 6Print “夏天”Case 7 to 9Print “秋天”Case 10 to 12Print “冬天”Case ElsePrint “打錯了” End Case,37,Try It!,輸入月分,傳回當月的天數 1月31天 2月28天 7月31天 8月31天 使用If與Select Case,