培訓目標:
???掌握各種基本數據類型以及流程控制語句的語法,感受VB編程。
培訓內容:
???1.?VB中的數據類型;
???2. VB中的常量與變量;
???3. VB中的運算符;
???4. VB中的流程控制語句。
課后練習:
???改進第一次培訓布置的“計算器”,要求實現四則運算,并充分利用流程控制語句來實現語句的改進及對數據長度、數據類型以及除零等異常的防范。
???1、VB中的數據類型
-
??????基本數據類型
- 比較特別的有對象類型和變體類型。Object 對象類型可以簡單的理解成為對控件對象的引用;Variant 變體類型可以算是VB中的特殊類型,由于它的存在常常讓人對VB的數據類型檢查產生誤解。VB在變量聲明時,如果不指定變量類型則VB就將為該變量指定為 Variant 類型。
- 在最常用的數據類型中,特別要注意的就是 Integer 整型,之所以要特點注意就是因為它的值域很小,在使用中可能會產生數值溢出,通常的做法是在VB中直接使用 Long 來替換全部的 Integer 。
-
表中可以看到有個“類型符”列,它是聲明變量類型的簡化形式。
???自定義數據類型 / 枚舉類型
PPT中只簡述了類型的聲明語法,實際上這兩種類型的用處極大,通過對它們的使用可以讓你的程序更加具有有讀性和面向對象的特點,呵呵。來看看俺的示例代碼,從中應該可以有點感覺(在VB6中書寫枚舉類型的變量時可是會有彈出提示的喲)。
自定義類型和枚舉類型的使用
Option ? Explicit
' 這里使用了一個自定義類型來表現登錄中的關鍵信息
' 通過這里的使用將登錄中相互關聯的3個屬性綁在一起
Private ?Type?typLogInfo
????UserName? As ? String ?????????????? ' 登錄用戶名
????Pwd? As ? String ??????????????????????????? ' 登錄密碼
????LogState? As ?enuLogState???? ' 登錄結果
End ?Type
' 這里的枚舉類型表現了登錄的結果,從下面可以看到對于代碼的可讀性可以有很大的改善
Public ? Enum ?enuLogState
????Success? = ? 0 ????????????????????????????? ' 登錄成功
????Faile???????????????????????????????????????????? ' 登錄失敗
End?Enum
' 這是登錄窗體上的"登錄"按鈕的Click事件
Private ? Sub ?cmdOK_Click()
???? Dim ?LoginInfo? As ?typLogInfo? ' 聲明變量
???? ' 存入登錄的用戶名以及密碼以便下面的檢查時使用
????LoginInfo.UserName? = ? Trim (txtUserName.Text)
????LoginInfo.Pwd? = ? Trim (txtPassword.Text)
???? ' 檢查登錄的名稱及密碼是否正確
???? Call ?loginCheck(LoginInfo)
???? ' 根據檢查的結果來分支邏輯
???? If ?LoginInfo.LogState? = ?Success? Then ???? ' 這里可以看到枚舉對于改善代碼的可讀性提供了極大幫助
???????? MsgBox ? " 歡迎您: " ? & ?LoginInfo.UserName
???? Else
???????? MsgBox ? " 登錄失敗 "
???? End ? If
End?Sub
' 這是一個自定義的過程,利用它來做登錄檢查
' 過程具有一個typLogInfo類型的參數,外部將登錄的信息傳進來
Private ? Sub ?loginCheck(logInfo? As ?typLogInfo)
???? ' 檢查登錄的名稱及密碼是否正確
???? If ?txtUserName? = ? " ddm " ? And ?txtPassword? = ? " 123 " ? Then
???????? ' 通過了登錄檢查
????????logInfo.LogState? = ?Success
???? Else
???????? ' 登錄失敗
????????logInfo.LogState? = ?Faile
???? End ? If
End?Sub
-
常量,在VB中最為常見的就是VB常量;常量的最大用處就是助記(VB支持中文,但是中文編程也不能濫用,因此在常量中使用是比較好的選擇)
Public ? Const ?單位資料表? As ? String ? = ? " DAD6CPP " -
變量,變量的聲明需要注意。因為VB支持隱式聲明(就是不聲明)和聲明時省略數據類型,這兩種情況下變量并不是沒有類型,而是 Variant 類型。
Public ? Sub ?doSomthing()
????x? = ? 1
???? Dim ?y
???? Dim ?i1,?i2,?i3? As ? Long
End?Sub
這是三個例子,其中的變量 X 和 Y 都是 Variant 類型,這個比較看出,注意的是第3行聲明,這是極易出錯的地方,只有 i3 是Long,i1、i2 都是 Variant。
- 連接運算符多用 & 就好,+ 對兩邊操作數會有類型要求
-
全部的運算符沒什么可好說的,按規矩來即可,只是要注意一點在使用運算符時多用括號比依賴記憶的效果要好
。
- 條件語句 IF ... Then? ...? Else ... EndIF,如果是單條語句用 IIF函數 來替換也是不錯的,在使用IF語句時必須注意將 Else 寫全,這對于日后的調試有很大的益處(當你找半天都沒能發現錯誤所在時就知道了)。
-
分支語句 Select Case ... Case ... Case Else ... End Select,Case表達式所支持的語法非常的靈活性,這樣使得分支語句可使用的范圍非常的廣,它在特定情況下可有效改善 多IF條件 代碼可讀性下降的問題。下面來看看對上面示例的改善過程:
使用多條IF
Option ? Explicit
' 這里使用了一個自定義類型來表現登錄中的關鍵信息
' 通過這里的使用將登錄中相互關聯的3個屬性綁在一起
Private ?Type?typLogInfo
????UserName? As ? String ?????????? ' 登錄用戶名
????Pwd? As ? String ??????????????? ' 登錄密碼
????LogState? As ?enuLogState????? ' 登錄結果
End ?Type
' 這里的枚舉類型表現了登錄的結果,從下面可以看到對于代碼的可讀性可以有很大的改善
Public ? Enum ?enuLogState
????Success? = ? 0 ????????????????? ' 登錄成功
????PwdFaile???????????????????? ' 密碼錯誤
????Faile??????????????????????? ' 登錄失敗
End?Enum
' 這是登錄窗體上的"登錄"按鈕的Click事件
Private ? Sub ?cmdOK_Click()
???? Dim ?LoginInfo? As ?typLogInfo? ' 聲明變量
???? ' 存入登錄的用戶名以及密碼以便下面的檢查時使用
????LoginInfo.UserName? = ? Trim (txtUserName.Text)
????LoginInfo.Pwd? = ? Trim (txtPassword.Text)
???? ' 檢查登錄的名稱及密碼是否正確
???? Call ?loginCheck(LoginInfo)
???? ' 根據檢查的結果來分支邏輯,這里示例的是IF嵌套
???? If ?LoginInfo.LogState? = ?Success? Then ???? ' 這里可以看到枚舉對于改善代碼的可讀性提供了極大幫助
???????? MsgBox ? " 歡迎您: " ? & ?LoginInfo.UserName
???? Else
???????? If ?LoginInfo.LogState? = ?PwdFaile? Then
???????????? MsgBox ? " 密碼錯誤 "
???????? Else
???????????? MsgBox ? " 用戶不存在 "
???????? End ? If
???? End ? If
End?Sub
' 這是一個自定義的過程,利用它來做登錄檢查
' 過程具有一個typLogInfo類型的參數,外部將登錄的信息傳進來
Private ? Sub ?loginCheck(logInfo? As ?typLogInfo)
???? ' 檢查登錄的名稱及密碼是否正確,這里示例了使用ElseIf語句
???? If ?txtUserName? = ? " ddm " ? And ?txtPassword? = ? " 123 " ? Then
???????? ' 通過了登錄檢查
????????logInfo.LogState? = ?Success
???? ElseIf ?txtUserName? = ? " ddm " ? Then
???????? ' 用戶名正確,密碼錯誤
????????logInfo.LogState? = ?PwdFaile
???? Else
???????? ' 用戶名錯誤
????????logInfo.LogState? = ?Faile
???? End ? If
End?Sub
這里的登錄狀態只使用了3種狀態,可以看到 cmdOK_Click 事件中對狀態的檢查使用的是多條IF,如果狀態更多的話那么這里的代碼會顯得更加的繁瑣,看看CASE能夠給我們帶來什么。
使用CASE分支來替換IF
' 這是登錄窗體上的"登錄"按鈕的Click事件
Private ? Sub ?cmdOK_Click()
???? Dim ?LoginInfo? As ?typLogInfo? ' 聲明變量
???? ' 存入登錄的用戶名以及密碼以便下面的檢查時使用
????LoginInfo.UserName? = ? Trim (txtUserName.Text)
????LoginInfo.Pwd? = ? Trim (txtPassword.Text)
???? ' 檢查登錄的名稱及密碼是否正確
???? Call ?loginCheck(LoginInfo)
???? ' 根據檢查的結果來分支邏輯
???? Select ? Case ?LoginInfo.LogState
???????? Case ?enuLogState.Success
???????????? MsgBox ? " 歡迎您: " ? & ?LoginInfo.UserName
???????? Case ?enuLogState.PwdFaile
???????????? MsgBox ? " 密碼錯誤 "
???????? Case ?enuLogState.Faile
???????????? MsgBox ? " 用戶不存在 "
???????? Case ? Else
???????????? MsgBox ? " 未知結果 "
???? End ? Select
End?Sub
這里的分支比較少,如果多的話優勢則更明顯。 -
循環語句 For ... Next / For Each ... Next,這里舉一個使用 For Each 語句的示例,這種形式的運用比較多:
使用For Each遍歷
' 清空文本框的內容
Private ? Sub ?clearText()
???? Dim ?objTextBox? As ?Control
???? For ? Each ?objTextBox? In ? Me .Controls?? ' 使用FOR?EACH在窗體的控件集合中遍歷
???????? If ? TypeName (objTextBox)? = ? " TextBox " ? Then
????????????objTextBox.Text? = ? ""
???????? End ? If
???? Next
End?Sub
Private ? Sub ?Form_Load()
???? Call ?clearText?? ' 清空窗體上文本框的內容
End?Sub - 循環語句 Do ... Loop,這個需要注意的一點就是要在適當的時候記住要能夠終止。
- 循環語句中選用 For ... Next 還是 Do ... Loop 沒有特定的要求。For 更適于循環次數明確的情況,而 Do 適于循環次數不明,但終止條件了解的情況。
??????培訓課件PPT