|
首頁
>
電腦課
vb教學
VB 6
- 底下範例檔名有些是Big碼中文名稱,如果無法下載,請請試試看改變瀏灠器的設定。在「工具→網際網路選項→進階」底下有「永遠將 URL 傳送成 UTF-8」前的勾勾取消,並重新啟動瀏灠器。(在 IE 7 是「傳送 UTF-8 URL」
程式通識
請務必詳讀
- 程式的語法及一些基本的架構(循序、選擇、重覆)務必弄清楚用法,避免語法錯誤。
- 寫程式應先分析整個問題的大架構,細分為小段後,再從每一小段開始撰寫程式並除錯,然後逐漸架構出完整的內容。重點在於:程式指令的先後順序一定不能搞錯。
- 寫程式時,記得要縮排,除了美觀外,也可以幫助除錯。(按 Tab 是比較快的縮排方式)
- 注意程式語法的配對,如寫 Do 時,最好先在下一行打上 Loop,然後在中間插行空白行後再繼續寫迴圈內的程式敘述。(其它如 If End If,For Next 亦同)
- 在思考程式流程時,若要記錄、計算或暫存一項會變動的資料時,就是新增一個變數的時機了。
- 請注意全域變數及區域變數的區別,最好也了解一下靜態變數的用法。
- 在視窗程式設計中,要特別注意輸入資料的檢查;錯誤的輸入,往往會造成程式的錯誤。
- 請特別注意資料型態的差別,尤其是字串與數字的處理方式常會造成程式的錯誤。
- 使用數字型態時,要特別注意溢位的問題,也要注意整數及小數有效位數的限制。
- 如果輸入的資料必須是特定項目,則可以使用 CheckBox、OptionButton、List、Combo 等控制項,以點選的方式來輸入資料,可以避免輸入的錯誤。
- 撰寫程式往往需要較長時間的思考與測試,更應隨手記下心得或程式碼,不然容易忘記,所以請準備【筆記本】。
程式流程
程式的基礎三步驟 輸入→處理→輸出(變成新的輸入, Repeat)
輸入資料
- 使用 InputBox 函數,或文字方塊、下接選單…等各種控制項來輸入資料。
- 讀取檔案內容當成輸入資料。
- 以處理過的資料(輸出結果)當成新的輸入資料。
處理過程
- 簡單的四則運算,條件判斷…
- 複雜的演算過程,如搜尋、排序、串列…
輸出結果
- 使用Print、MsgBox、標籤、文字方塊…等各種控制項來顯示結果。
- 把資料寫入檔案。(輸出至檔案)
- 有時侯輸出的結果是為了當成另一個輸入資料,以進行另一次處理。
學習目標 - 避免被當?
- 學會不同控制項的使用方法(屬性、方法、事件),不同控制項有不同的特色,得學會如何妥善運用,以成為輸入、輸出工具。
- 學會循序、選擇、重覆結構的各種語法、用法;所有程式,所有處理過程,就是這三種結構不斷的排列組合罷了。
- 了解資料型態的意義
- If ... Then 、 Select Case 等條件判斷
- For Next 、 While 、 Do Loop 迴圈
- 陣列的使用 - 大量資料的處理
- 副程式及函數的使用:使用內建函數或自訂函數來簡化程式。
- 學習更深入的演算法,如搜尋、排序、DFS、Binary Tree…
控制項
如何輸入資料(或顯示結果)?數字、文字、日期?該注意的事項有哪些?其重要的屬性方法有哪些?如何檢查輸入的資料是否正確?
使用InputBox輸入姓名、身高、生日。
- 考慮身高:當輸入 175 、 -1 、 320 、 a3c …時,該如何處理?
- 如何將姓及名區分開?如輸入「陳建文」時,尊稱為「陳帥哥」
- 生日用「日期型態Date」、「數字型態」或「文字型態String」哪一種來處理較適當?
使用文字方塊TextBox來輸入資料,輸入姓名、身高、生日…比照InputBox的要求。
- 如何隱藏輸入文字?(如輸入密碼) - 請將身高隱藏 PasswordChar
- 如何輸入多行文字外加捲軸?MultiLine、ScrollBars
- 如何限制輸入長度?(如學號最多六碼) MaxLength
- 如何限制只能輸入數字? 利用 KeyPress 或 KeyDown 事件
- 如何限制只能輸入數字,且數字不重覆?如 3827 (玩 1A2B 猜數字遊戲時的數字)
使用選擇鈕OptionButton來輸入性別、科系
- 如何分組? 框架Frame
- 如何設定預設值?在該選項的屬性視窗中設定 Value 屬性為 True(因為單選,所以只能設定其中一項)
- 如何檢查選擇的項目?
- 如何使用控制項陣列來簡化?
- 如何利用程式碼來選擇選項?(在程式執行時,程式自動選擇)
使用核取方塊CheckBox來勾選使用語言
- 如何設預設值?在屬性視窗中設定Value屬性,0 表示未勾選,1 表示已勾選
- 如何取得核取(勾選)結果?直接判斷Value屬性是0 或 1
- 如何利用程式碼來勾選?Check1.Value = 1(假設其名稱為 Check1)
使用清單ListBox或下拉式清單ComboBox來輸入(1)生日 (2)科系 (3)使用語言(複選)
- 如何預先填入資料到清單中?使用List屬性
- 如何利用程式碼將資料加到清單中?AddItem方法
- 如何判斷點選了清單中的那一項?ListIndex屬性及List屬性陣列或Text屬性。
- 如何設定及判斷多重選擇?MultiSelect屬性、Selected屬性陣列
- 分清楚ListCount、ListIndex、List()、Selected?
- 使用Click事件或Change事件即時偵測點選的項目。
使用水平捲軸HScroll或垂直VScroll來(1)選擇身高 (2)以三個捲軸來設定視窗背景顏色?
- 屬性值?Min、Max、SmallChange、LargeChange、Value的用途?
- 如何利用Change事件,來自動改變顏色。
使用計時器Timer讓 VB 每隔特定時間執行一段程式。
- 屬性值?Enabled、Interval
- 唯一的事件-Timer事件
如何利用滑鼠拖曳控制項
- DragIcon 屬性可以設定拖曳時的圖案,但必須是 .ico 的圖示檔。
- 滑鼠拖曳(Drag)的模式有兩種,手動 - DragMode 屬性值為 0 、自動 - DragMode 屬性值 1
- 使用自動模式較簡單,但該控制項的 Click、MouseDown、MouseUp 等滑鼠事件會失效。
- 手動拖曳拖式需配合 MouseDown 或 MouseUp 等事件,並以 Drag 方法來啟動拖曳,使用上多了一些步驟,但也多了彈性,如用限制只有右鍵能拖曳…
- 了解兩事件的驅動情形:DragDrop - 拖曳放開後,接收的物件會驅動此事件、DragOver - 拖曳經過其它控制項時,該控制項會驅動此事件。
- 範例:壓縮檔
迴圈範例
累加 - 等差級數的累加
- 計算 1+2+3+...+30
- 計算 3+6+9+...+30
- 計算 10+8+6+...+0-2-4-...-10
- 計算 1+1/2+1/3+...+1/10
- 計算 1/2+2/3+3/4+...+29/30
- 計算 1*2*3*...*7
內建及自訂函數
內建函數
- 內建函數指的是 VB 事先設計好的各種函數,藉由這些函數可以幫助我們快速處理日期、數字、文字…
- 數字函數:用來計算數值
數值函數
函數名稱 | 功能說明 | 範例 | 範例結果 |
SQR(N) |
傳回N的根號 |
SQR(4) |
2 |
ABS(N) |
傳回N的絕對值 |
ABS(-2) |
2 |
Int(N) |
傳回等於或小於N的整數 |
Int(2.4) Int(-2.4) |
2 -3 |
Fix(N) |
傳回N的整數部份,小數直接捨去 |
Fix(2.4) Fix(-2.4) |
2 -2 |
Round(N,P) |
將N取四捨五入到小數後第P位後傳回結果 |
Round(5/3,2) |
2.67 |
Rnd(N) |
傳回1個>=0且<1隨機亂數 |
Int(Rnd*10)+5 |
傳回5~14中任一整數 |
Randomize |
設定亂數種子,與Rnd配合使用 |
|
|
Sin(N) Cos(N)Tan(N) |
傳回N的正弦值…等,N的單位是弳度,不是角度 範列中的PI=3.14159265358979 |
Sin(PI/6) |
0.5 |
- 字串函數:用來處理文字,在VB中用敘極廣,請特別留意;底下有些函數有更進一步的用法,請參考MSDN的說明。
字串函數
函數名稱 | 功能說明 | 範例 | 範例結果 |
Chr(N) |
傳回ASCII碼為N的字元 |
Chr(65) |
"A" |
Asc(S) |
傳回字串S第1個字元的ASCII碼 |
ASCII("A") |
65 |
Val(S) |
將S字串轉成數值 |
Val("123") Val("52A") Val("xxx") |
123 52 0 |
Str(N) |
將數字N轉換成字串型態 注意:正數前會有一個空白 |
Str(23) Val(-43) |
" 23" "-43" |
Len(S) |
取得字串S的長度(字元數) |
Len("ABCDE") |
5 |
Left(S,N) |
取得字串S左邊的N的字元 |
Left("ABCDE",2) |
"AB" |
Right(S,N) |
取得字串S右邊的N的字元 |
Right("ABCDE",2) |
"DE" |
Mid(S,M,N) |
從字串S第M個字元開始取得N個字元 |
Mid("ABCDE",2,3) |
"BCD" |
UCase(S) |
將字串S的所有英文小寫字母轉成大寫字母 |
UCase("AbcDe") |
"ABCDE" |
LCase(S) |
將字串S的所有英文大寫字母轉成小寫字母 |
LCase("AbcDe") |
"abcde" |
Trim(S) LTrim(S) RTrim(S) |
去除字串S兩側的空白字元(左側、右側) |
Trim(" A B ") |
"A B" |
String(N,S) |
傳回N個S字元,S可以是字元,也可以是ASCII碼 |
String(4,"A") String(4,66) |
"AAAA" "BBBB" |
StrReverse(S) |
將字串反過來 |
StrReverse("ABCDE") |
"EDCBA" |
InStr(S,F) |
從字串S中尋找F字串,若找到則傳回S字串中F出現的位置,若找不到則傳回0 |
InStr("ABCDABCD","D") InStr("ABCDEF","CC") |
4 0 |
InStr(m,S,F) |
與上例相同,但指定從字串S的第m個字元開始尋找,而不是從頭找 |
InStr(6,"ABCDABCD","D") |
8 0 |
Replace(S,F,R) |
從字串S中尋找字串F,並以字串R取代。 |
Replace("ABCDE","BCD","xxx") |
"AxxxE" |
函數名稱 | 功能說明 | 範例 | 範例結果 |
Format(S,F) |
將字串S依據指定的格式F重新產生字串 左側例子中 Time是時間函數,傳回目前的時間 Date是日期函數,傳回目前的日期 D=#1/27/1993# T=#5:04:23 PM# |
Format(Time, "Long Time") Format(Time, "Long Date") Format(T, "h:m:s") Format(T, "hh:mm:ss AMPM") Format(D, "dddd, mmmm d yyyy") Format(5365.6, "##,##0.00") Format(534.9, "###0.00") Format(2.5, "0.00%") Format("HELLO", "<") Format("hello", ">") |
下午 03:09:46 1899年12月30日 17:4:23 05:04:23 下午 Wednesday, January 27 1993 5,365.60 534.90 250.00% hello HELLO |
- 日期時間函數:用來處理日期與時間,也是常用的函數。
日期時間函數
函數名稱 | 功能說明 | 範例 | 範例結果 |
Now |
傳回目前的日期及時間,不用加任何參數 (Now 等於 Date 加上 Time ?) |
Now |
2007/10/12 上午 09:24:44 |
Date |
傳回目前的日期,不用加任何參數 |
Date |
2007/10/12 |
Time |
傳回目前的時間,不用加任何參數 |
Now |
上午 09:24:44 |
Year(D) |
依指定的時間參數(D),傳回年 |
Year(Now) |
2007 |
Month(D) |
依指定的時間參數(D),傳回月份 |
Day(Now) |
10 |
MonthName(M) |
依指定的月份數字參數(M),傳回月份的名稱 |
MonthName(1) |
一月 |
Day(D) |
依指定的時間參數(D),傳回1~31的日期 |
Day(Now) |
12 |
Hour(T) |
依指定的時間參數(Time),傳回小時 |
Hour(Now) |
9 |
Minute(T) |
依指定的時間參數(Time),傳回分鐘 |
Month(Now) |
24 |
Second(T) |
依指定的時間參數(Date),傳回秒數 |
Second(Now) |
44 |
數值函數的應用
- 數值函數的應用比較單純,需注意的事項如下:
- 使用亂數函數Rnd() 取亂數時,若要求取得整數,則常和Int()函數配合,公式:V = Int(Rnd*數量)+起始值。如 10 ~ 20 共有 11 個數字,且從 10 開始算起,所以亂數取法為V = Int(Rnd*11)+10
- 取亂數時,通常也會和Randomize一起使用,但是 Randomize 通常只需執行一次,因此放在Form_Load()程序中是最適合的。
- 使用Round()函數可以四捨五入,但是VB的四捨五入和一般數學習慣的四捨五入不一樣,完整而言應該是「四捨六入五成雙」因此Round(4.5, 0)會得到 4 ,而Round(5.5, 0)的結果是 6。
- 如何以一般數學習慣的方式來四捨五入?若變數A是欲處理的數字,則Int(A*10+0.5)/10,可以將數字A四捨五入到小數後第1位,若想取到小數後第2位,則將10變成100,以此類推。至於為什麼可以這樣做?請同學用三個數字來推一次,並比較其精髓,3.6、6.3及4.5。
- 三角函數Sin()、Cos()也是常用的函數,尤其在處理圓形相關的事項時,如讓球做「圓周運動」、畫正 N 邊形、畫時鐘、或類似環繞文字的特效都會用到。因此也需要多加留意。
字串函數的應用
- 字串函數的應用非常的廣,很多程式技巧也必需藉由字串的方式來處理,因此幾乎上述所有函數都要很熟,寫程式才不會產生障礙。
- 在做進制轉換時,因為A~F與10~16需要互轉,因此藉由ASC()函數與Chr()函數,可以快速轉換。
- 在字串處理時,常需要逐字處理,此時利用For迴圈配合Mid()函數最為方便,若以反向逐字處理,可先利用StrReverse()函數,反轉字串再處理。
- 其餘族繁不及備載…請參閱各程式實際演算應用。
|