Your browser does not support JavaScript!

Recent

數據載入中...
首頁 > 電腦課
vb教學

VB 6

  1. 底下範例檔名有些是Big碼中文名稱,如果無法下載,請請試試看改變瀏灠器的設定。在「工具→網際網路選項→進階」底下有「永遠將 URL 傳送成 UTF-8」前的勾勾取消,並重新啟動瀏灠器。(在 IE 7 是「傳送 UTF-8 URL」
程式通識

請務必詳讀

  1. 程式的語法及一些基本的架構(循序、選擇、重覆)務必弄清楚用法,避免語法錯誤。
  2. 寫程式應先分析整個問題的大架構,細分為小段後,再從每一小段開始撰寫程式並除錯,然後逐漸架構出完整的內容。重點在於:程式指令的先後順序一定不能搞錯
  3. 寫程式時,記得要縮排,除了美觀外,也可以幫助除錯。(按 Tab 是比較快的縮排方式)
  4. 注意程式語法的配對,如寫 Do 時,最好先在下一行打上 Loop,然後在中間插行空白行後再繼續寫迴圈內的程式敘述。(其它如 If End If,For Next 亦同)
  5. 在思考程式流程時,若要記錄、計算或暫存一項會變動的資料時,就是新增一個變數的時機了。
  6. 請注意全域變數區域變數的區別,最好也了解一下靜態變數的用法。
  7. 在視窗程式設計中,要特別注意輸入資料的檢查;錯誤的輸入,往往會造成程式的錯誤。
  8. 請特別注意資料型態的差別,尤其是字串與數字的處理方式常會造成程式的錯誤。
  9. 使用數字型態時,要特別注意溢位的問題,也要注意整數及小數有效位數的限制。
  10. 如果輸入的資料必須是特定項目,則可以使用 CheckBox、OptionButton、List、Combo 等控制項,以點選的方式來輸入資料,可以避免輸入的錯誤。
  11. 撰寫程式往往需要較長時間的思考與測試,更應隨手記下心得或程式碼,不然容易忘記,所以請準備【筆記本】。

程式流程

程式的基礎三步驟 輸入→處理→輸出(變成新的輸入, Repeat)

輸入資料

  1. 使用 InputBox 函數,或文字方塊、下接選單…等各種控制項來輸入資料。
  2. 讀取檔案內容當成輸入資料。
  3. 以處理過的資料(輸出結果)當成新的輸入資料。

處理過程

  1. 簡單的四則運算,條件判斷…
  2. 複雜的演算過程,如搜尋、排序、串列…

輸出結果

  1. 使用Print、MsgBox、標籤、文字方塊…等各種控制項來顯示結果。
  2. 把資料寫入檔案。(輸出至檔案)
  3. 有時侯輸出的結果是為了當成另一個輸入資料,以進行另一次處理。

學習目標 - 避免被當?

  1. 學會不同控制項的使用方法(屬性、方法、事件),不同控制項有不同的特色,得學會如何妥善運用,以成為輸入、輸出工具。
  2. 學會循序、選擇、重覆結構的各種語法、用法;所有程式,所有處理過程,就是這三種結構不斷的排列組合罷了。
    • 了解資料型態的意義
    • If ... Then 、 Select Case 等條件判斷
    • For Next 、 While 、 Do Loop 迴圈
    • 陣列的使用 - 大量資料的處理
    • 副程式及函數的使用:使用內建函數或自訂函數來簡化程式。
  3. 學習更深入的演算法,如搜尋、排序、DFS、Binary Tree…

控制項

如何輸入資料(或顯示結果)?數字、文字、日期?該注意的事項有哪些?其重要的屬性方法有哪些?如何檢查輸入的資料是否正確?

使用InputBox輸入姓名、身高、生日。

  1. 考慮身高:當輸入 175 、 -1 、 320 、 a3c …時,該如何處理?
  2. 如何將姓及名區分開?如輸入「陳建文」時,尊稱為「陳帥哥」
  3. 生日用「日期型態Date」、「數字型態」或「文字型態String」哪一種來處理較適當?

使用文字方塊TextBox來輸入資料,輸入姓名、身高、生日…比照InputBox的要求。

  1. 如何隱藏輸入文字?(如輸入密碼) - 請將身高隱藏 PasswordChar
  2. 如何輸入多行文字外加捲軸?MultiLineScrollBars
  3. 如何限制輸入長度?(如學號最多六碼) MaxLength
  4. 如何限制只能輸入數字? 利用 KeyPress 或 KeyDown 事件
  5. 如何限制只能輸入數字,且數字不重覆?如 3827 (玩 1A2B 猜數字遊戲時的數字)

使用選擇鈕OptionButton來輸入性別、科系

  1. 如何分組? 框架Frame
  2. 如何設定預設值?在該選項的屬性視窗中設定 Value 屬性為 True(因為單選,所以只能設定其中一項)
  3. 如何檢查選擇的項目?
  4. 如何使用控制項陣列來簡化?
  5. 如何利用程式碼來選擇選項?(在程式執行時,程式自動選擇)

使用核取方塊CheckBox來勾選使用語言

  1. 如何設預設值?在屬性視窗中設定Value屬性,0 表示未勾選,1 表示已勾選
  2. 如何取得核取(勾選)結果?直接判斷Value屬性是0 或 1
  3. 如何利用程式碼來勾選?Check1.Value = 1(假設其名稱為 Check1)

使用清單ListBox或下拉式清單ComboBox來輸入(1)生日 (2)科系 (3)使用語言(複選)

  1. 如何預先填入資料到清單中?使用List屬性
  2. 如何利用程式碼將資料加到清單中?AddItem方法
  3. 如何判斷點選了清單中的那一項?ListIndex屬性及List屬性陣列或Text屬性。
  4. 如何設定及判斷多重選擇?MultiSelect屬性、Selected屬性陣列
  5. 分清楚ListCountListIndexList()Selected
  6. 使用Click事件或Change事件即時偵測點選的項目。

使用水平捲軸HScroll或垂直VScroll來(1)選擇身高 (2)以三個捲軸來設定視窗背景顏色?

  1. 屬性值?MinMaxSmallChangeLargeChangeValue的用途?
  2. 如何利用Change事件,來自動改變顏色。

使用計時器Timer讓 VB 每隔特定時間執行一段程式。

  1. 屬性值?EnabledInterval
  2. 唯一的事件-Timer事件

如何利用滑鼠拖曳控制項

  1. DragIcon 屬性可以設定拖曳時的圖案,但必須是 .ico 的圖示檔。
  2. 滑鼠拖曳(Drag)的模式有兩種,手動 - DragMode 屬性值為 0 、自動 - DragMode 屬性值 1
  3. 使用自動模式較簡單,但該控制項的 Click、MouseDown、MouseUp 等滑鼠事件會失效。
  4. 手動拖曳拖式需配合 MouseDown 或 MouseUp 等事件,並以 Drag 方法來啟動拖曳,使用上多了一些步驟,但也多了彈性,如用限制只有右鍵能拖曳…
  5. 了解兩事件的驅動情形:DragDrop - 拖曳放開後,接收的物件會驅動此事件、DragOver - 拖曳經過其它控制項時,該控制項會驅動此事件。
  6. 範例:壓縮檔

迴圈範例

累加 - 等差級數的累加

  • 計算 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()函數,反轉字串再處理。
  • 其餘族繁不及備載…請參閱各程式實際演算應用。

 

瀏覽數  
將此文章推薦給親友
請輸入此驗證碼
Voice Play
更換驗證碼