Download presentation
Presentation is loading. Please wait.
1
第六章 選擇結構 (應用:核取方塊、選項按鈕、框架)
第六章 選擇結構 (應用:核取方塊、選項按鈕、框架)
2
章節預覽 理論 實作 6.1 運算式與布林資料型態 6.2 演算法 6.3 結構化程式語言與程式設計
6.10 Visual Basic的母件與子件 實作 6.4 Visual Basic的選擇敘述 6.5 巢狀式選擇敘述 6.6 多向選擇敘述與函數 6.7 核取方塊控制項 6.8 選項按鈕控制項 6.9 框架控制項 6.11 本章整合應用實例
3
6.1:運算式與布林資料型態 選擇結構依靠的是布林資料型態的變數值 布林資料型態除了可以使用單一變數來表示,條件運算式的結果也都是布林資料。
因為布林資料型態只能提供真(True)或假(False)兩種變數值,因此十分適合做為選擇結構的條件。 布林資料型態除了可以使用單一變數來表示,條件運算式的結果也都是布林資料。 例如:A>B。 當A大於B時,代表(A>B)運算式結果為真(True), 當A小於等於B時,代表(A>B)運算式結果為假(False)。 運算式種類分為關係運算式與邏輯運算式兩種。
4
6.1:運算式與布林資料型態 關係運算式 『關係運算式』是用來提供字串或數值比較的功能。經過運算比較之後,結果將為True(真)或False(假)。 Visual Basic提供關係運算子如下表所列: 關係運算子 意義 Visual Basic關係運算式 數學表示式 = 相等 X=Y <> 不相等 X<>Y X≠Y > 大於 X>Y < 小於 X<Y >= 大於或等於 X>=Y X≧Y <= 小於或等於 X<=Y X≦Y
5
6.1:運算式與布林資料型態 【範例】: 5.5 > 3.2 結果為True(真)
【範例】: 5.5 < 結果為False(假) 【範例】: A=4:B= A < B 結果為False(假) 【範例】: "j" > "q" 結果為False(假) 【字串大小之比較】: 字串大小的比較將以ASCII碼之數值來比較大小 例如:j的ASCII碼為6AH,q的ASCII碼為71H。 所以"q"比"j"大。 字串的比較首先會以第一個字元的ASCII碼來比較,若相等,則以第二個字元的ASCII碼來比較,依序往後面的字元比較,直到分出大小為止。
6
6.1:運算式與布林資料型態 邏輯運算式 『邏輯運算式』可以用來做布林資料的邏輯運算,其結果也是True(真)或False(假)。 Visual Basic提供邏輯運算子如下表所列: 邏輯 運算子 意義 邏輯 運算式 說明 And 且 X And Y 當X、Y都為真時,結果才為真。 Or 或 X Or Y X、Y中只要有一個為真,結果就為真。 Xor 互斥 X Xor Y X、Y必須為不同的真假值,結果才為真。 Not 非 Not X 若X為真,則結果為假; 若X為假,結果為真。(有反相之意)
7
6.1:運算式與布林資料型態 真值表如下: 【範例】: Not (10>9) 結果為False(假)
【範例】: (10>9) And ("U"="u") 結果為False(假) 【範例】: (10>9) Or ("U"="u") 結果為True(真) 【範例】: (10>9) Xor ("U"="u") 結果為True(真) 【範例】: X=20 : Y= (X>Y) Xor (X<Y) 結果為True(真) 【範例】: 身高為150~160之運算式 → (height>=150) And (height<=160) X Y Not X X And Y X Or Y X Xor Y False True
8
6.2:演算法 『演算法』(Algorithm)
『解決某一特定問題而發展的一系列具有次序性且明確之步驟』。 在設計程式來解決問題之前,應該先思考解決問題的步驟,此時不一定要直接將思考所得到的結論轉換為程式,也可以先將思考的過程以『演算法』來加以呈現。演算法必須滿足下列五個特性: 輸入: 可以包含零個以上的輸入資料。 輸出: 至少有一個以上的輸出資料。 明確性: 每個步驟必須明確,不可模擬兩可。 有限性: 演算法必須在有限個步驟內停止並解決問題。 有效性: 每一個步驟都可以由人透過紙和筆來執行,並且必須能夠在有限的時間內加以完成。
9
6.2:演算法 【演算法與程式之差異】: 明顯地演算法與程式是不相同的, 程式可以無窮地反覆被執行,例如:某些作業系統。而演算法則不能無窮地被執行。 從另一個角度來看,一個良好的程式事實上必須具有兩個特性:良好的資料結構與良好的演算法。 資料結構是用來規劃資料儲存與取用的排列方式,而演算法則是解決問題的步驟。 解決問題的方法,除了使用『演算法』表達之外,也可以使用流程圖來加以表達。
10
6.2:演算法 流程圖(Flowchart) 『流程圖』使用簡單的圖形符號表達處理問題的步驟,每一個圖形所代表的作業功能不太相同,並且使用箭頭來表示作業的流程。 流程圖之製作通常佔用較大的紙上面積,因此較適合用於處理簡單的問題或某個子問題的細部邏輯。常用的流程圖符號如下表所列: 符號 符號名稱 功能 範例 起始/結束符號 流程圖的起點或終點 處理符號 代表處理問題的步驟 輸入/輸出符號 表示該步驟為資料輸入或資料輸出
11
6.2:演算法 演算法虛擬語言(Algorithm Pseudo-Language) 符號 符號名稱 功能 範例 決策符號
根據符號內的條件,決定下一步驟。 連結符號 當流程圖過大時,做為兩塊流程圖之連接點 跨頁連結符號 當流程圖過大時,做為兩頁流程圖之連接點 流程方向 工作流程之方向 演算法虛擬語言(Algorithm Pseudo-Language) 虛擬語言(Pseudo-Language)是演算法的描述語言,常見的虛擬語言有SPARKS、Pidgin-ALGOL、Pascal-like等等,這些虛擬語言與實際的程式語言通常很類似,但卻比較不在意語法的細節,因此甚至可以用一般的簡單敘述來描述演算法的步驟。
12
流程圖與演算法範例 求1+3+5+...+N 流程圖: 演算法: 輸入(Input):輸入一個正奇數N
輸出(Output):輸出Sum,Sum= … + N 【解決問題的步驟】: Step 1:輸入一個正奇數N Step 2:令Sum ← 0 Step 3:令i← 1 Step 4:若iMod 2 = 1則執行Step5,否則跳至Step 6。 Step 5:令Sum ← Sum +i Step 6:令i←i+ 1 Step 7:若i≦N,則跳回到Step 4執行,否則執行Step 8。 Step 8:輸出Sum Step 9:結束程式執行
13
6.3:結構化程式語言與程式設計 結構化程式語言最大的特色即為不允許使用『無條件式跳躍指令』(Goto)。除此之外,更詳細地來說,一個程式語言足以稱為結構化程式語言,必須具有下列特性: 只允許使用三種基本的邏輯結構:循序、選擇和重覆。(不允許或不建議使用Goto) 使用上而下(Top-down)的程式設計技巧。 具模組獨立性。 【Goto敘述】: Goto是早期BASIC語言常用的一個敘述,功能為無條件跳躍至指定的行號執行程式(早期BASIC語言需使用行號來編寫程式)。由於無條件跳躍指令將導致程式難以維護與修改,因此,在結構化程式設計中,大多不允許或不建議使用該類指令。
14
6.3:結構化程式語言與程式設計 『循序』結構 『循序』結構非常直覺而簡單,也就是『程式碼被執行的順序為由上而下,一個敘述接著一個敘述依序執行』。 結構: 範例:
15
6.3:結構化程式語言與程式設計 『選擇』結構 『選擇』結構則是代表程式在執行時,會依據條件(運算式的結果)適當地改變程式執行的順序。 當滿足條件時,會執行某一敘述區塊(通常是接續的敘述區塊), 若條件不滿足時,則執行另一敘述區塊。 選擇結構可以分為三種: 單一選擇 雙向選擇 多向選擇
16
6.3:結構化程式語言與程式設計 單一選擇結構 單一選擇結構只能註明條件成立時,要執行的敘述區塊。 當條件不成立時將不會執行該區塊內的敘述,並且也不會執行任何敘述而逕自前往執行選擇結構之後的敘述。而當條件成立時,會先執行區塊內的敘述然後才前往執行選擇結構之後的敘述。 單一選擇結構: 範例:
17
6.3:結構化程式語言與程式設計 雙向選擇結構:
雙向選擇結構則能夠指定條件成立時要執行的敘述區塊,也能指定條件不成立時要執行的敘述區塊。敘述區塊執行完畢將會繼續執行選擇結構之後的敘述。 雙向選擇結構: 範例:
18
6.3:結構化程式語言與程式設計 多向選擇結構:
多向選擇結構可以設定條件值為各類狀況時要執行的敘述區塊,甚至還可以指定不符合所列之各類狀況時要執行的區塊。敘述區塊執行完畢將會繼續執行選擇結構之後的敘述。 多向選擇結構: 範例:
19
6.3:結構化程式語言與程式設計 『重覆』結構 使用『重覆』結構時,電腦會重複執行某一段敘述區塊,直到某個條件成立或不成立時,重覆動作才會停止。通常我們將『重覆』結構稱之為『迴圈』(loop) 。 重覆結構可以分為兩種: 前測式 後測式
20
6.3:結構化程式語言與程式設計 前測式重覆結構: 前測式重覆結構: 範例:
先測試條件,若條件為真,才執行敘述區塊(即迴圈內敘述),當敘述區塊執行完畢後,會再回到測試條件重新測試條件,若條件仍舊成立,則再一次執行敘述區塊。如此反覆『測試』、『執行敘述區塊』。直到條件不成立時才會離開迴圈。因此,在執行敘述區塊時,應該要有改變測試值的機會,否則將造成無窮迴圈(迴圈永不停止)。 前測式重覆結構: 範例:
21
6.3:結構化程式語言與程式設計 後測式重覆結構: 範例: 後測式重覆結構:
先執行迴圈內的敘述區塊一次,然後再測試條件,若條件為真,則重覆執行迴圈內敘述區塊,當敘述區塊執行完畢後,重回到測試條件重新測試條件,若條件仍舊成立,則再一次執行敘述區塊。如此反覆『測試』、『執行敘述區塊』。直到條件不成立時才會離開迴圈。因此,迴圈內的敘述區塊至少會被執行一次。至於實際被執行多少次,則必須視條件值而定。 後測式重覆結構: 範例:
22
6.4:Visual Basic的選擇敘述 Visual Basic提供的選擇敘述分類如下圖所示。
無條件選擇敘述Goto並不具備選擇特性,只具有跳躍功能,並且由於不符合結構化程式設計的特性,因此不建議使用。 Visual Basic除了敘述之外,還提供具有選擇性質的函數: 雙向選擇函數:IIf函數 多向選擇函數:Choose函數、Switch函數
23
6.4:Visual Basic的選擇敘述 單一選擇敘述(If … Then … 敘述)
在Visual Basic中,寫上述的實例程式也是同樣的道理,只不過將『下雨』使用運算式來表達。把『打傘』用程式敘述來表達。例如:If A>1 Then B= 當A>1時,將B的變數值指定為100。 如果要做的事不只一件的時候,則可構成敘述區塊,以下是一個生活實例。 同樣地,該範例也符合Visual Basic的語法,在從Then到 End If之內所有事情就是 當If之後的條件運算式邏輯 成立時所要做的事情。 If 下雨 Then 打傘 If 感冒了 Then 多喝水 多休息 End If
24
6.4:Visual Basic的選擇敘述 單一選擇敘述語法(If … Then … 敘述) 【範例6-1】:
透過文字方塊的內容 做為條件,決定輸出 『你』或『妳』 做為問候語尊稱。 If…Then…語法一: If…Then…語法二: If 判斷式 Then 要執行的單一敘述 If 判斷式 Then 敘述區塊 End If Private Sub cmdEnd_Click() ByeStr1 = "謝謝" ByeStr2 = "你" ByeStr3 = "的使用" If txtSex.Text = "女" Then ByeStr2 = "妳" ByeStr = ByeStr1 + ByeStr2 + ByeStr3 MsgBox ByeStr, 0, "感謝" End End Sub
25
6.4:Visual Basic的選擇敘述 【範例6-2】: 根據購買入場卷的數量是否大於10決定是否打折優待。 4 5 6 7 8 9
11 Private Sub cmdCompute_Click() lblFree.Visible = False lblPrice.Caption = Val(lblOnePrice.Caption) * Val(txtQty.Text) If Val(txtQty.Text) >= 10 Then lblPrice.Caption = Val(lblPrice.Caption) * 0.95 lblFree.Visible = True End If End Sub
26
6.4:Visual Basic的選擇敘述 雙向選擇敘述(If … Then … Else … 敘述)
…………….. 條件成立時要執行的敘述區塊A Else 條件不成立時所執行的敘述區塊B End If
27
6.4:Visual Basic的選擇敘述 【範例6-3】: 根據購買入場卷的數量是否大於10決定是否打折優待。
【程式執行結果】:(同範例6-2執行結果) 1 2 3 4 5 6 7 8 9 10 11 12 '****************************************************** '******** f6_03.frm(If...Then...Else...敘述) ******** Private Sub cmdCompute_Click() If Val(txtQty.Text) >= 10 Then lblPrice.Caption = Val(lblOnePrice.Caption) * Val(txtQty.Text) * 0.95 lblFree.Visible = True Else lblPrice.Caption = Val(lblOnePrice.Caption) * Val(txtQty.Text) lblFree.Visible = False End If End Sub
28
6.4:Visual Basic的選擇敘述 IIf函數 IIf函數將可以依照條件運算式的真假值回傳不同的資料。其語法如下:
TruePart與FalsePart可以是字串資料型態、數值資料型態或運算式 【範例6-4】: 根據輸入的資料 判斷並透過IIf函數 取得不同的字串。 語法:IIf(<條件運算式>, TruePart , FalsePart) 功能:依照條件的成立與否,分別回傳TruePart或FalsePart。 4 5 6 7 8 9 10 11 Private Sub cmdEnd_Click() ByeStr1 = "謝謝" ByeStr2 = IIf(txtSex.Text = "女", "妳", "你") ByeStr3 = "的使用" ByeStr = ByeStr1 + ByeStr2 + ByeStr3 MsgBox ByeStr, 0, "感謝" End End Sub
29
6.5:巢狀式選擇敘述 選擇敘述之敘述區塊中可以包含任何敘述,因此也可以在該區塊中再放入另一個選擇敘述,形成兩層式『巢狀式選擇』。同時可以利用此一技巧製作更多層的『巢狀式選擇』。 巢狀式選擇敘述一般用在『兩個以上的選擇條件』時 使用運算式來表達兩個以上的條件也可以 使用巢狀式選擇有時比複雜運算式來得容易理解程式的流程依據。 巢狀式選擇敘述並未規定外層的 選擇敘述種類 可以把內層 的選擇式敘述放在單一 選擇(If…Then…)的 Then敘述區塊或雙向 選擇(If…Then…Else) 的Then敘述區塊或Else 敘述區塊中。
30
6.5:巢狀式選擇敘述 巢狀式選擇敘述所對應的流程圖如下:
31
6.5:巢狀式選擇敘述 【範例6-5】: 根據輸入的繳款記錄、持卡年份評斷預借現金額度。公式如下: 繳款記錄:不正常 ===>無法預借現金 繳款記錄:正常 持卡未滿半年=======>無法預借現金 持卡滿半年未滿1年 ==>預借現金額度為信用額度之一半 持卡滿1年 =========>預借現金額度為全額
32
6.5:巢狀式選擇敘述 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Private Sub Command1_Click() If (txtStatus.Text = "正常") Then If (Val(txtYear.Text) >= 0.5) Then If (Val(txtYear.Text) < 1) Then MsgBox "預借現金金額為" & Val(txtCredit.Text) / 2 & "元" '半額 Else MsgBox "預借現金金額為" & txtCredit.Text & "元" '全額 End If MsgBox "預借現金金額為0元" '無法預借現金 MsgBox "預借現金金額為0元" '無法預借現金 End Sub
33
6.5:巢狀式選擇敘述 【範例6-6】: 使用單一層的If…Then…Else敘述設計具有範例6-5效果的程式。 4 5 6 7 8 9
10 11 12 13 14 15 Private Sub Command1_Click() If ((txtStatus <> "正常") Or (Val(txtYear) < 0.5)) Then OutputStr = "預借現金金額為0元" '無法預借現金 End If If ((txtStatus = "正常") And (Val(txtYear)<1) And (Val(txtYear)>=0.5)) Then OutputStr = "預借現金金額為" & Val(txtCredit.Text) / 2 & "元" '半額 If ((txtStatus = "正常") And (Val(txtYear) >= 1)) Then OutputStr = "預借現金金額為" & txtCredit.Text & "元" '全額 MsgBox OutputStr End Sub
34
6.5:巢狀式選擇敘述 【程式設計原則】: 範例6-5、6-6解決了相同的問題,程式設計可以選擇任何一種方法,但最好掌握下列原則:
1. 正確並符合題意的執行結果。(這是絕對需要遵守的條件) 2. 容易維護的設計方法(例如:易懂、適合除錯、具有擴充性)。 3. 縮短程式發展時程。 4. 考慮使用的記憶體空間及執行效率。
35
6.6:多向選擇敘述與函數 除了單一選擇與雙向選擇之外,Visual Basic還提供了多向選擇敘述與函數。
Select…Case…多向選擇敘述 Choose函數 Switch函數 多向選擇敘述(Select…Case…敘述) 當狀況不只一個的時候,除了使用多個或巢狀式If...Then...Else…選擇敘述之外,也可以使用Select…Case…多向選擇敘述。
36
6.6:多向選擇敘述與函數 Select…Case…敘述語法 Select…Case…語法: Select…Case…流程圖
……敘述區塊1…… Case 條件測試值2 ……敘述區塊2…… : Case 條件測試值n ……敘述區塊n…… Case Else ……敘述區塊…… End Select
37
6.6:多向選擇敘述與函數 【範例】:Case "Y" '測試值是否為大寫『Y』
【範例】:Case "xyz","XYZ" '測試值是否為『xyz』或 『XYZ』字串。 【範例】:Case Is < '測試值是否小於100。 【範例】:Case –10,0, '測試值是否為-10或0或10。 【範例6-7】: 使用多向選擇敘述Select…Case…設計分數等級計算。
38
6.6:多向選擇敘述與函數 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Private Sub cmdTrans_Click() score = InputBox("請輸入分數", "輸入分數") Select Case score Case Is < 60 MsgBox "分數等級為丁等" Case 60 To 69 MsgBox "分數等級為丙等" Case 70 To 79 MsgBox "分數等級為乙等" Case 80 To 89 MsgBox "分數等級為甲等" Case 90 To 99 MsgBox "分數等級為優等" Case 100 MsgBox "完滿分數" Case Else MsgBox "您輸入了不合法的分數" End Select End Sub
39
6.6:多向選擇敘述與函數 【範例6-8】:使用多向選擇敘述Select…Case…設計多功能計算機。 4 5 6 7 8 9 10 11
12 13 14 15 16 17 18 19 20 21 22 23 24 Private Sub cmdCompute_Click() Select Case txtOp.Text Case "+" lblResult.Caption = Val(txtX.Text) + Val(txtY.Text) Case "-" lblResult.Caption = Val(txtX.Text) - Val(txtY.Text) Case "*" lblResult.Caption = Val(txtX.Text) * Val(txtY.Text) Case "/" lblResult.Caption = Val(txtX.Text) / Val(txtY.Text) Case "\" lblResult.Caption = Val(txtX.Text) \ Val(txtY.Text) Case "Mod" lblResult.Caption = Val(txtX.Text) Mod Val(txtY.Text) Case "^" lblResult.Caption = Val(txtX.Text) ^ Val(txtY.Text) Case Else lblResult.Caption = "" MsgBox "輸入錯誤的運算子,請輸入+,-,*,/,\,Mod,^", 48, "錯誤" End Select End Sub
40
6.6:多向選擇敘述與函數 Choose函數 Choose函數可以依照輸入的參數值,選擇不同的回應值,其語法如下: 【語法說明】:
若Index為小數,則小數部份會被捨棄,只取整數值。 Ele1 ,Ele2 ,...,Elen 可以為不同的資料型態。 Index =1,則傳回Ele1 值;Index = 2,則傳回Ele2 值;…;Index=n,則傳回Elen 值。 若Index小於1或大於n,則傳回Null(無對應值)。 語法:Choose(Index, Ele1[, Ele2,…,Elen]) 功能:依Index(索引整數值),傳回後面陣列中對應的元素值。
41
6.6:多向選擇敘述與函數 【範例6-9】: 使用Choose函數,設計一個阿拉伯數字與羅馬數字的轉換程式。 4 5 6 7 8 9 10
11 12 Private Sub cmdCompute_Click() Num = Val(txtNum.Text) RomNum = Choose(Num, "I", "II", "III", "IV", "V") If IsNull(RomNum) Then lblRomNum.Caption = "Overflow" Else lblRomNum.Caption = RomNum End If End Sub
42
6.6:多向選擇敘述與函數 Switch函數 Switch函數可以依照條件運算式成立與否,決定不同的回應值,其語法如下: 【語法說明】:
先判斷條件運算式1是否為真,若為真,則傳回V1;否則將判斷條件運算式2。其他依此類推,直到發現某個條件運算式成立為止。若所有條件運算式皆為假,則傳回Null(無對應值)。 Ele1 ,Ele2 ,...,Elen 可以為不同的資料型態。 語法:Switch(條件運算式1, Ele1[, 條件運算式2, Ele2,…,條件運算式n, Elen]) 功能:依序判斷條件運算式是否成立,若成立則回傳對應的Ele。
43
6.6:多向選擇敘述與函數 【範例6-10】: 使用Switch函數,設計一個羅馬數字與阿拉伯數字的轉換程式。 4 5 6 7 8 9 10
11 12 Private Sub cmdCompute_Click() RomNum = txtRomNum.Text Num = Switch(RomNum = "I", 1, RomNum = "II", 2, RomNum = "III", 3) If IsNull(Num) Then lblNum.Caption = "Overflow" Else lblNum.Caption = Num End If End Sub
44
6.7:核取方塊(Check Box)控制項 『核取方塊』控制項 建立核取方塊 2:在表單上拉出核取方塊控制項大小。
具有複選(選取0個以上)功能的選擇元件。 建立核取方塊 2:在表單上拉出核取方塊控制項大小。 1:選取核取 方塊工具。
45
6.7:核取方塊(Check Box)控制項 核取方塊的常用屬性 屬性 屬性值說明 Alignment (對齊位置)
核取方塊內之標題名稱與核取框的相對位置: 0-靠左對齊:核取框在標題名稱的左側(預設值) 1-靠右對齊:核取框在標題名稱的右側 Caption (標題名稱) 標題名稱,預設名稱為Check1,Check2..(同物件名稱) Enabled (可使用) 核取方塊是否允許被核取 True-核取方塊可被核取(預設值)。 False-核取方塊不能被核取。 Value (預設屬性) 核取方塊被選取的狀態: 0-不核取:核取方塊未被選取(預設值)。 1-核取:核取方塊已被選取。 2-灰色:核取方塊內v符號呈現灰色。
46
【實作範例6-11】 核取方塊的程式設計 【實作範例6-11】: 透過核取方塊決定文字之字體變化。 上機實作
Step1:專案名稱為『p6_11』。 Step2:在表單上產生下列控制項並設定屬性。 Step3:編輯下頁程式碼。
47
【實作範例6-11】 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Private Sub chkFontBold_Click() If chkFontBold.Value = 1 Then lblShowWord.FontBold = True Else lblShowWord.FontBold = False End If End Sub Private Sub chkFontItalic_Click() If chkFontItalic.Value = 1 Then lblShowWord.FontItalic = True lblShowWord.FontItalic = False Private Sub chkFontName_Click() If chkFontName.Value = 1 Then lblShowWord.FontName = "標楷體" lblShowWord.FontName = "新細明體"
48
【實作範例6-11】 Step4:執行程式。
49
6.8:選項按鈕(Option Button)控制項
『選項按鈕』控制項 使用選項按鈕控制項可限制使用者只能選擇其中一個選項按鈕。 建立選項按鈕 2:在表單上拉出選項 按鈕控制項大小。 1:選取選項 按鈕工具。
50
6.8:選項按鈕(Option Button)控制項
選項按鈕的常用屬性 屬性 屬性值說明 Alignment (對齊位置) 選項按鈕內之標題名稱與按鈕的相對位置: 0-靠左對齊:選項按鈕在標題名稱的左側(預設值) 1-靠右對齊:選項按鈕在標題名稱的右側 Caption (標題名稱) 標題名稱,預設名稱為Option1、Option2…(同物件名稱) Enabled (可使用) 選項按鈕是否允許被選取 True-選項按鈕可被選取(預設值)。 False-選項按鈕不能被選取。 Value (預設屬性) 選項按鈕被選取的狀態: False:選項按鈕未被選取(預設值)。 True:選項按鈕已被選取。
51
【實作範例6-12】 選項按鈕的程式設計 【實作範例6-12】: 透過選項按鈕決定文字變化。 上機實作
Step1:專案名稱為『p6_12』。 Step2:在表單上產生下列控制項並設定屬性。 Step3:編輯下頁程式碼。
52
【實作範例6-12】 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Private Sub optAll_Click() If optAll.Value = True Then lblPrice.Caption = "200元" End If End Sub Private Sub optHalf_Click() If optHalf.Value = True Then lblPrice.Caption = "100元" Private Sub optStu_Click() If optStu.Value = True Then lblPrice.Caption = "120元"
53
【實作範例6-12】 Step4:執行程式。
54
6.9:框架(Frame)控制項 『框架』控制項 除了將選項按鈕分組之外,框架也可以包含其他控制項。使用框架來包裝控制項有下列優點:
同一性質控制項若集中放在某一個框架內,可以方便使用者的介面操作。 針對選項按鈕而言,將多組選項按鈕群安置於不同的框架中,則不同框架內的按鈕選項彼此是獨立的(每一個框架內都可以選取一個選項按鈕)。 移動框架時,框架內的控制項會一起移動,節省介面設計的時間。
55
2:在表單上拉出框架控制項大小 (需保留放入框架之控制項空間)。
6.9:框架(Frame)控制項 建立框架 框架的常用屬性 2:在表單上拉出框架控制項大小 (需保留放入框架之控制項空間)。 4.安置其它控制項於框架內。 1:選取框架工具。 3:修改框架屬性值。 屬性 屬性值說明 Caption (標題名稱) 標題名稱,預設名稱為Frame1、Frame2、…(同物件名稱),請修改為能夠表示該框架內容之文字。
56
【實作範例6-13】 框架的程式設計 【實作範例6-13】:
透過不同框架管理選項按鈕。並依照不同狀況計算出不同的票價。 外野:免費。(0元) 內野-全票:200元。 內野-半票:100元。 內野-學生票:200元。 上機實作 Step1:專案名稱為『p6_13』。 Step2:在表單上產生下列控制項並設定屬性。
57
【實作範例6-13】 Step3:編輯程式碼。 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Private Sub cmdPrice_Click() If optInside.Value = True Then If optAll.Value = True Then lblPrice.Caption = "200元" Else If optHalf.Value = True Then lblPrice.Caption = "100元" lblPrice.Caption = "120元" End If lblPrice.Caption = "免費" End Sub
58
【實作範例6-13】 Step4:執行程式。
59
6.10:Visual Basic的母件與子件 Visual Basic提供的某些物件彼此存在某種特殊的主從關係,例如將選項按鈕放到框架內,移動框架時,這些選項按鈕就會跟著移動。這種關係稱為母子關係 包含其他物件的物件的稱為『母件』或『收納器』 被包含的物件則稱為『子件』。 母件與子件存在某些特殊關係,因此具有下列特性: 母件會把其內部的子件與外部的物件隔離,使得外部物件無法干擾其子件。例如上一節介紹框架母件將子件『選項按鈕』與其他外部物件隔離。 子件的座標值將是以母件為基準,換句話說,其座標為與母件的相對位置。 子件會隨著母件一起移動,便利介面的規劃。 並非所有的物件都可以當做母件 在Visual Basic所提供的物件中,只有『螢幕』、『表單』、『框架』、『圖片方塊』、『印表機』等物件可以做為母件。 『螢幕』(Screen)是所有母件中最基本的一個物件,也是最大的一個物件。
60
6.10:Visual Basic的母件與子件 最基本的螢幕母件,具有特殊性質 幕物件的常用屬性如下: 具有唯一性(只能有一個)
具有屬性唯讀性(大多數螢幕物件的屬性只能讀取而不能修改) 幕物件的常用屬性如下: 【範例】:範例6-13的母件與子件。 範例6-13有下列物件。 屬性 屬性值說明 ActiveControl 目前擁有控制權的控制項名稱 ActiveForm 目前工作的表單名稱 Height 螢幕的高度 Width 螢幕的寬度
61
6.10:Visual Basic的母件與子件 物件名稱 物件類別 母子關係 Screen 螢幕 母件(根):有一子件f6_13 f6_13
表單 既是子件也是母件。 子件:母件為Screen 母件:有5個子件 fraPos 框架 既是子件也是母件。 子件:母件為f6_13 母件:有2個子件 optInside 選項按鈕 子件:母件為fraPos optOutside fraTicket 既是子件也是母件。 子件:母件為f6_13 母件:有3個子件 optAll 子件:母件為fraTicket optHalf optStu Label1 標籤 子件:母件為f6_13 lblPrice cmdPrice 指令按鈕
62
6.10:Visual Basic的母件與子件 要確定某物件是否為框架物件的子件,可以利用下列兩種方式完成:
1. 拖曳該物件,試試看能否將之拖曳離開框架物件,若不能離開框架,則代表該物件為框架的子件。 2. 拖曳框架物件,若該物件也跟隨著移動,則框架為該物件之母件。
63
6.10:Visual Basic的母件與子件 如果母子件設定有誤,而想要刪除某個控制項時,可以按照下列步驟達成:
1. 先選取要刪除的控制項,此時該控制項會變成作用控制項(即邊框出現8個小黑點)。 2. 執行【編輯/刪除】指令或快顯功能表的【刪除】指令,作用控制項就會被刪除。
64
6.11:本章整合應用實例 【實作範例6-14】: 上機實作 使用框架、選項按鈕、核取方塊等控制項,撰寫一個投票程式。
Step1:專案名稱為『p6_14』。 Step2:在表單上產生下列控制項並設定屬性。
65
【實作範例6-14】、【實作範例6-15】 【範例6-15】: Step3:編輯程式碼。 Step4:執行程式。
修正範例6-14,去除 下面3個核取方塊, 使得男女共用上面3個 核取方塊。並且將lblP1 與lblP4重疊、lblP2與 lblP5重疊、lblP3與lblP6 重疊。
66
6.12:本章回顧 理論 實作 運算式與布林資料型態 演算法(流程圖) 結構化程式語言與程式設計 Visual Basic的母件與子件
巢狀式選擇敘述 選擇敘述與函數 核取方塊控制項 選項按鈕控制項 框架控制項
67
本章習題
Similar presentations