第五章 選擇結構

98
第第第 第第第第 本本本本本本本本本本本本本本本本本本本本本本本本本本

Upload: rhonda-morin

Post on 31-Dec-2015

68 views

Category:

Documents


0 download

DESCRIPTION

第五章 選擇結構. 本章投影片僅供本書上課 教師 使用 , 非經同意請勿拷貝或轉載. 5-1 關係運算式與邏輯運算式. 關係運算式 和 邏輯運算式 是構成條件基本要件。運算式經過運算產生 True( 真 ) 或 False( 假 )  供我們決定程式執行的流向。 一、關係運算式 關係運算式功能  用來比較數值、字串等資料的大小關係。. 關係運算子種類與關係運算式用法:. 【 例 1】 7 > 4  結果 True 【 例 2】 "a" > "b"  結果為 False - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第五章     選擇結構

第五章 選擇結構

本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載

Page 2: 第五章     選擇結構

5-1 關係運算式與邏輯運算式 關係運算式和邏輯運算式是構成條件基本要件。運算式經過運算產生 True(真 ) 或 False(假 ) 供我們決定程式執行的流向。一、關係運算式關係運算式功能 用來比較數值、字串等資料的大小關係。

Page 3: 第五章     選擇結構

關係運算子種類與關係運算式用法:

Page 4: 第五章     選擇結構

【例 1 】 7 > 4 結果 True

【例 2 】 "a" > "b" 結果為 False ‘ a 的 ASCII 碼為 97 , b 的 ASCII 碼為

98

【例 3】 #3/17/2006# >= #1/1/2006# 結果為 True 。

【例 4 】身高 (tall) 不超過 186 的條件式: tall <= 186

Page 5: 第五章     選擇結構

二、邏輯運算式邏輯運算子可將多個關係運算式結合成較複雜的邏輯運算式。

邏輯運算子 邏輯運算式 用 法

And A And B 當 A與 B 皆為真,結果為真

Or A Or B A或 B 其中一個為真,結果為真

AndAlso A AndAlso B如同 And 功能。如 A為 False 時,不再判斷 B ,可加快程式速度

OrElse A OrElse B如同 Or 功能。如 A為 True 時,不再判斷 B ,可加快程式速度

Not Not A 若 A 為真則結果為假。反之亦然

Xor A Xor BA、 B 中必須有一個為真且一個為假,結果才為真

A 和 B運算元可以是關係運算式、布林變數和布林常值。

Page 6: 第五章     選擇結構

【例 1 】小明總成績 (score)為 92 ,操行等第(grade) 為甲。請檢查下列指定條件式各種邏輯運算的 結果。 (score >=90) And (grade= "甲 ")

【例 2 】 請寫出成績 60 score < 80≦ 之間的條件式

(score>=60) And (score<80)

結果為真

A 和 B運算元可以是關係運算式、布林變數和布林常值。

A B A And B A Or B Not A A Xor B

真 真 真 真 假 假真 假 假 真 假 真假 真 假 真 真 真假 假 假 假 真 假

Page 7: 第五章     選擇結構

5-2 演算法 (algorithm) 介紹 為解決某一特定問題規劃出來 一系列有順

序且明確的步驟。 好的演算法滿足下列五條件: 1. 有限性 2. 明確性 3. 輸入資料 4. 輸出資料 5. 有效性

Page 8: 第五章     選擇結構

演算法方式 :

1. 虛擬碼( Pseudo Code) : 即一般口語語文描述處理問題的步驟

2. 流程圖 (Flow Chart)

Page 9: 第五章     選擇結構

一、虛擬碼 (Pseudo Code)

使用文字敘述來說明處理問題的步驟。類似程式語言。此種表示方式較易於改寫成任何程式語言。複雜的演算法大都採用此種方式來描述。

Page 10: 第五章     選擇結構

二、流程圖 (Flow Chart)

流程圖就是利用簡明的圖形符號,來表示程式處理問題的步驟和方法。

它藉著各種不同的圖形和箭頭來表達解決問題的順序。

每一種圖形代表一種作業功能。

Page 11: 第五章     選擇結構
Page 12: 第五章     選擇結構

使用虛擬碼和流程圖描述輸入成績求總和的步驟1. 使用虛擬碼表示 Step1 令總和 (sum) = 0

Step2 輸入成績 (score)

Step3 若 score >= 0 ,則繼續下一步驟; 否則跳 到 Step 6

Step4 令 sum = sum + score

Step5 跳回 Step 2 繼續執行 Step6 印出 sum

Step7 結束程式執行

Page 13: 第五章     選擇結構

2. 使用流程圖表示

Page 14: 第五章     選擇結構

5-3 結構化程式設計 結構化程式設計是發展軟體所採用的一項基本程式設計技術。

包括 1. 使用循序、選擇和重覆結構。 2. 由上而下設計。 3. 模組獨立。

Page 15: 第五章     選擇結構

一 . 循序結構

Page 16: 第五章     選擇結構

二、選擇結構 程式在執行時,依據條件式的結果來改變程式 執行的流向。一般分三種 : 1. 單一選擇結構

Page 17: 第五章     選擇結構

2. 雙向選擇結構

Page 18: 第五章     選擇結構

3. 多向選擇結構

Page 19: 第五章     選擇結構

三 . 重複結構程式中某一敘述區段需要反覆地執行,一直到符合或是不符合某一條件時,才離開重覆執行的敘述區段。

條件式由關係、邏輯及算術運算式組成稱為迴圈 (Loop) 。重覆結構可分為下列兩種: 1. 前測式重覆結構 2. 後測式重覆結構

Page 20: 第五章     選擇結構

前測式迴圈

Page 21: 第五章     選擇結構

後測式迴圈

敘述區段 A至少會執行一次

Page 22: 第五章     選擇結構

5-4 選擇敘述

Page 23: 第五章     選擇結構

一 . 單向選擇的 If … Then 敘述If < 條件 > Then

敘述區段End If

If (a < 0) Then a = -a ' 敘述一行 省略 End If

If (score < 60) Then ‘ 分數低於 60 的處理 sum += score ' 累加入總分 count+=1 ' 不及格人數加 1 count 要先清為

0End If

Page 24: 第五章     選擇結構

二、雙向選擇的 If … Then … Else 敘述

If < 條件式 > Then

 敘述區段 A

Else

 敘述區段 B

End If

Page 25: 第五章     選擇結構

【例】使用雙向選擇結構來判斷 若 sex = "男 " ,顯示 " 先生 ,您好 ! "

若 sex = "女 " ,顯示 " 小姐 , 您好 ! "

Dim sex As String = "女 "

If sex = "男 " Then

Label1.Text = " 先生 , 您好 !"

Else

Label1.Text = " 小姐 , 您好 !"

End If

Page 26: 第五章     選擇結構

三、 IIf 函式若我們需要將選擇敘述執行的結果直接以數值或字串傳回時,可以透過 IIf函式一行敘述來取代的 If … Then … Else 敘述

Page 27: 第五章     選擇結構

【例】 若成績 (score) 60 輸出對話方塊顯示“及格”, 否則顯示 " 不及格 " 。

1. 使用 If … Then … Else 敘述

If score > =60 Then MsgBox(" 及格 ") Else MsgBox(" 不及格 ") End If

Page 28: 第五章     選擇結構

2. 使用 IIf 函式MsgBox ( IIf (score >=60, " 及格 ", " 不及格 " ) )

【例】使用巢狀的 IIf函式。若金額 amount 1000 打九折

amount 5000 打八折將應付金額顯示在 Label1 標籤控制項

Label1.Text = amount * ( IIf ( amount >= 5000, 0.8, IIf(amount >= 1000, 0.9,1 )))

Page 29: 第五章     選擇結構

範例 試使用一個 If 敘述和兩個 IIF函式來做分數

(score) 和等第 (grade)換算作業。 條件: 0 score <60 grade = "D" 60 score <70 grade = "C" 70 score <80 grade = "B" 80 score grade = "A"

Page 30: 第五章     選擇結構

Label1

Label2

Page 31: 第五章     選擇結構

【問題分析】 本例可使用多種解法,如巢狀 If 敘述、 Select Case

敘述等方法 ; 惟本例限定使用一個 If 敘述和兩個 IIF函式,而 If 敘述只有兩種選擇,所以應該將四種等第由中間 70 分開始判斷,如下 :

若 70 分以上透過 IIF(score>80, "A", "B") ,按成績範 圍分出 "A"和 "B" 等第。 若 70 分以下透過 IIF(score>60, "C", "D") ,按成績範 圍分出 "C"和 "D" 等第。 按確定鈕 (btnOk) ,根據成績設定等第,將程式碼寫在 btnOk_Click 事件處理程序內。

按結束鈕 (btnEnd) ,結束程式執行,在 btnEnd_Click事件處理程序內插入 End 敘述。

Page 32: 第五章     選擇結構

【上機】1. 建立表單 :

專案名稱命名為 "grade"。

在表單內建立輸出入介面 (如 P.30 所示 )

2. 設立各物件屬性 :物 件預設名稱

Name物件名稱

Text標題

Font/Size字型大小

Label1 (預設值 ) 成績等第換算 12

Label2 (預設值 ) 成績 : 12

Label3 lblShow 等第 : 12

TextBox1 txtScore 空字串 12

Button1 btnOk 確定 12

Button2 btnEnd 結束 12

Page 33: 第五章     選擇結構

' FileName :grade.sln01 Private Sub btnOk_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles btnOk.Click02 Dim score As Integer03 score = Val(txtScore.Text)04 If (score >= 70) Then ‘ 成績 >=70 執行第 5 行,否則執行第 7 行05 lblShow.Text = " 等第 : " & IIf(score >= 80, "A", "B")06 Else ‘ 5行 : 使用 IIF ,成績 >=80為 A 否則為 B07 lblShow.Text = " 等第 : " & IIf(score >= 60, "C", "D")08 End If ‘ 7行 : 使用 IIF ,成績 >=60為 C 否則為 D09 End Sub10 ' -------------------------------------------------------------------------------------11 Private Sub btnEnd_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles btnEnd.Click12 End13 End Sub

Page 34: 第五章     選擇結構

5-5 巢狀選擇 如果再條件選擇敘述區段裡面又有條件選擇敘述,就形成了所謂巢狀選擇 ; 通常當選擇的條件有兩種以上時,就可以利用巢狀選擇去解決。

Page 35: 第五章     選擇結構

巢狀選擇敘述的流程圖

Page 36: 第五章     選擇結構

試做分數 (score) 和等第 (grade)換算作業。

0 score <60 grade = "D" 60 score <70 grade = "C" 70 score <80 grade = "B" 80 score grade = "A"

Label1

Label2

Page 37: 第五章     選擇結構

80

Page 38: 第五章     選擇結構

' FileName :NestIf.sln01 Private Sub btnOK_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles btnOK.Click

02 Dim score As Integer

03 score = Val(txtScore.Text)

04 If (score < 0 Or score > 100) Then

05 MsgBox(" 分數超出範圍 限 0~100 ")

06 txtScore.Text = ""

06 Else

07 If (score >= 70) Then

08 If (score >= 80) Then

09 lblShow.Text = " 等第 : A "

10 Else

11 lblShow.Text = " 等第 : B "

12 End If

Page 39: 第五章     選擇結構

13 Else

14 If (score >= 60) Then

15 lblShow.Text = " 等第 : C "

16 Else

17 lblShow.Text = " 等第 : D "

18 End If

19 End If

20 End If

21 End Sub

22 ‘ ----------------------------------------------------------------------------------

23 Private Sub btnEnd_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnEnd.Click

24 End

25 End Sub

Page 40: 第五章     選擇結構

5-6 多向選擇 當選擇條件超過兩種以上時:

可用上節介紹的巢狀選擇敘述,如太多層巢狀 If 敘述將增加程式複雜度。

改用多向選擇,可讀性高且具結構化。 多向選擇敘述將依程式條件式的測試結果,分

成各個執行路徑,不同結果執行不同的敘述區

段。

Page 41: 第五章     選擇結構

本節介紹三種多向選擇:

1. Select Case 敘述

2. Choose函式

3. Switch函式

Page 42: 第五章     選擇結構

一、 Select Case 敘述根據運算式 ( 數值或字串運算式 ) 的結果,由多個條件中選擇符合條件測試值的敘述區段去執行 ; 執行完畢繼續執行接在 End Select 後面的敘述語法

Page 43: 第五章     選擇結構

【例 1】Case "Y" :測試值是否為大寫 Y 字元。

【例 2】Case "abc" , "ABC" :測試值是否和左列的兩個字串之一相符。

【例 3】Case -5, 0, 100 :測試值是否等於數值– 5 、 0或 100 。

【例 4】Case 60 To 100 :測試值是否介於 60~ 100 間。

【例 5】Case Is < 60 :測試值是否小於 60 。

一些 Case 運算式 ( 數值或字串運算式 ) 子句常用測試值寫法

Page 44: 第五章     選擇結構
Page 45: 第五章     選擇結構

標題

提示訊息

預設值

按鈕 1

按鈕 2

使用 InputBox 函式顯示輸入對話方塊

Page 46: 第五章     選擇結構

' FileName :Tax.sln01 Private Sub Form1_Load(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles MyBase.Load02 Dim income, discount, tax As Integer ' 所得淨額 , 所得稅03 Dim tax_rate As Single '稅率04 Dim msg As String05 income = Val(InputBox(" 請輸入今年的綜合所得淨額: ", " _

綜合所得稅 ")) '用 InputBox函式輸入綜合所得淨額

06 msg = "綜合所得稅 " & vbNewLine07 Select Case income08 Case Is <= 37000009 tax_rate = 0.0610 discount = 011 Case 370001 To 99000012 tax_rate = 0.1313 discount = 2590014 Case 990001 To 198000015 tax_rate = 0.2116 discount = 105100

Page 47: 第五章     選擇結構

17 Case 1980001 To 372000018 tax_rate = 0.319 discount = 28330020 Case Is >= 372000121 tax_rate = 0.422 discount = 65530023 End Select24 tax = income * tax_rate ‘ 稅金 =綜合所得淨額 * 稅率25 msg &= "綜合所得淨額: " & Format(income, " #,###") & "元 " _

& vbNewLine26 msg &= "稅    率: " & Format(tax_rate, "0%") & vbNewLine27 msg &= "------------------------------------------" & vbNewLine28 msg &= "稅  金: " & Format(tax, "#,##0") & "元 " &

vbNewLine29 msg &= " 累 進 差 額: " & Format(discount, "#,##0") & "元 " & _

vbNewLine30 msg &= "------------------------------------------" & vbNewLine31 msg &= "今年應納稅額: " & Format(tax - discount, "#,##0") & "元 "32 MsgBox(msg) ‘MsgBox 敘述 ; 31行 :全年應納稅額 =稅金 – 累進差額

33 End34 End Sub

Page 48: 第五章     選擇結構

二、 Choose函式

【例 1】 res = Choose(i,"一 ","二 ","三 ","四 "); 如果 i=2 時, res = "二 " 。【例 2】 res = Choose(i,"1","one","一 ","壹 ") : 如果 i=3 時, res = "一 " ; 如果 i=5 時, res 為 Null 。

Choose函式會根據第一個引述的值,傳回相對的對應值

Page 49: 第五章     選擇結構

三、 Switch函式

【例 1】 msg = Microsoft.VisualBasic.Switch(sex = "男 ", " 先生 ", _ sex = "女 ", " 小姐 ") 若 sex= "女 " 時,則 msg= " 小姐 " 。

【例 2】

degree=Microsoft.VisualBasic.Switch (score>=90 And score<=100,_ "優 ", score>=80 And score<=89, "甲 ", score>=70 And score<=79, _ "乙 ", score>=60 And score<=69, "丙 ",score>=0 And score<=59, _ "丁 ") 若 score=81 時,則 degree= "甲 " 。 若 score=120 ,則 degree=Null 。

根據運算式的值,傳回相對的對應值

Page 50: 第五章     選擇結構

5-7 選項按鈕 RadioButton

程式中若需要有多個選項可供選擇但只能單選時使用 (i.e. 僅能多選一 ) 。同群組的「選項按鈕」彼此間具有互斥現象,亦即如果選取了同群組中的一個選項按鈕時,則該按鈕的 Checked屬性馬上變為 True 。而該群組中的其他選項按鈕的 Checked屬性馬上變為 False ,呈未選取狀態。

Page 51: 第五章     選擇結構

此對話方塊共有「發牌」、「計分」兩組選項按鈕。發牌部分只能二選一,計分部分只能三選一。

可以在程式中預設同群組中某個選項按鈕被點選,或全部預設都未點選。

遊樂場中的接龍程式對話方塊

選項按鈕 RadioButton

Page 52: 第五章     選擇結構

一、選項按鈕控制向常用的屬性

Page 53: 第五章     選擇結構

二、選項按鈕控制項常用的事件當在選項按鈕控制項上按一下,會變更 Checked屬性值,且同時依序觸動 CheckedChanged和 Click 兩個事件。但如果該按鈕已被選取,在重複點選時,因為 Checked屬性值未變,所以只會觸動 Click事件。

一般設計程式時,通常會將判斷選項按鈕是否被點選的程式碼寫在 CheckedChanged事件處理程序中。

Page 54: 第五章     選擇結構

兩事件使用上差異如下 :

1. CheckedChanged事件 為選項按鈕控制項的預設事件。當選項按鈕的 Checked 屬性值改變時會觸發此事件,用來判斷使用者到底選擇哪個選項按鈕。

2. Click事件 只要選項按鈕控制項被滑鼠點選時都 會觸發此事件。

Page 55: 第五章     選擇結構

選項按鈕 1~3 RadioButton

Label1

Label2

Page 56: 第五章     選擇結構

【問題分析】1. 本例要求點選選項按鈕除在表單的標籤控制項上顯示該新知訊息外,亦必須在選項按鈕的 Text標題文字後累加點閱次數。請注意,若該鈕已被點選,再按該鈕時點閱次數不累加。

2. 如何宣告本程式使用到的變數 :

使用 msg1~msg3 字串變數分別存放各類新知訊息內容。使用 count1~count3整數變數紀錄各類新知點按累加次數。 str1~str3 字串變數存放各選項按鈕的標題文字。因上述三類變數在各事件處理程序均會參用到,所以必須在所有事件處理程序前就要宣告。

Page 57: 第五章     選擇結構

【問題分析】 (續 )

3.當在選項按鈕按一下會觸動該按鈕的 Click和CheckedChanged事件,如何選擇哪個事件來顯示專有名詞內容及其點閱次數加 1 :

若將此程式碼寫在該按鈕的 click事件,會導致只要在該按鈕按一次即累加一次,即便是該按鈕目前已點選顯示其內容。

若將此程式碼寫在該按鈕的CheckedChanged事件,只要該按鈕的Checked屬性值由 True轉成 False 或由 False轉成 True 才會觸動此事件。

Page 58: 第五章     選擇結構

【問題分析】 (續 )

4. 如何在 CheckedChanged事件顯示專有名詞內容及其點閱次數加 1 :

使用 If 敘述檢查 Checked屬性是否為True?

若 Checked=True ,該按鈕的點閱次數加 1 ,並將次數顯示在該選項按鈕的標題文字上面。同時將專有名詞內容顯示在 lblShow標籤控制項上面。

若 Checked=False ,不做任何事離開該事件處理程序。

Page 59: 第五章     選擇結構

【問題分析】 (續 )

5. 表單載入時執行 Form1_Load事件處理程序,先設定欄位變數的初值 :

count1~ count3 變數存放點閱次數,初值設為 0 。 str1~ str3 字串變數存放電子書、雲端運算、體感遊戲名稱。

設定 msg1 字串變數存放電子書的內容 ( 如課本 ) 。

設定 msg2 字串變數存放雲端運算的內容 ( 如課本 ) 。

設定 msg3 字串變數存放體感遊戲的內容 ( 如課本 )

Page 60: 第五章     選擇結構

【上機】1. 建立表單 :

專案名稱命名為「 radibtn」。

在表單內建立輸出入介面 ( 如次頁所示 )

2. 設立各物件屬性 :物 件預設名稱

Name物件名稱

Text標題 AutoSize

Label1 Label1 資訊產業新知報導 True

RadioButton1 rdbeBook 電子書 True

RadioButton1 rdbCloud 雲端運算 True

RadioButton1 rdbKinect 體感遊戲 True

Label2 lblShow Label2 False

Page 61: 第五章     選擇結構

Label1

Page 62: 第五章     選擇結構

' FileName :radibtn.sln01 Dim msg1, msg2, msg3 As String ‘ 欄位變數02 Dim str1, str2, str3 As String ‘ 欄位變數 03 Dim count1, count2, count3 As Integer ‘ 欄位變數04 ' --------------------------------------------------------------------------------------05 Private Sub Form1_Load(ByVal sender …) Handles Me.Load06 msg1 = "電子書 ( e-book) 指數位化書籍以電子檔透過網路下載至

PC 、筆電、 PDA 、手機、或可存大量數位教材( 如 iPad),………… 以往繁雜出版流程。 "

07 msg2 = "雲端運算 (Cloud computing) 是目前資訊產業最夯的 議題。是一種網際網路資源利用的新方式,簡言之就 是把所有…………… .... 軟體共享、平台共享 ( Youtube 、 facebook、 Blocker等 )"

08 msg3 = " 體感遊戲器 (Kinect) 是微軟新一代體感遊戲機套件 Kinect 於 2010年底上市,以光學鏡頭辨識臉孔、追蹤玩家身體 動作、 ……………… 就可當舞神了。 "

09 count1 = 0 : count2 = 0 : count3 = 0 ‘ 5~13 行表單載入時執行此區段

10 str1 = rdbeBook.Text ‘ 設定變數初值 (電子書 )11 str2 = rdbCloud.Text ‘ 設定變數初值 (雲端運算 )12 str3 = rdbKinect.Text ‘ 設定變數初值 ( 體感遊戲 )13 End Sub

Page 63: 第五章     選擇結構

15 Private Sub rdbeBook_CheckedChanged(ByVal sender …) _ Handles rdbeBook.CheckedChanged

16 Dim strMsg As String ‘ 15~25 行選取電子書選項按鈕觸動此事件17 If rdbeBook.Checked =True then ‘ 17~24 行當 Checked屬性為18 count1 = count1 + 1 ‘ True 時,才將點閱次數加 1

19 strMsg = str1 & "(" & Str(count1) & " 次 ) "

20 rdbeBook.Text = strMsg

21 lblShow.BackColor = Color.Aqua

22 lblShow.Font = New Font("新細明體 " , 14 , FontStyle.Regular)

23 lblShow.Text = rdbeBook.Text & vbCrLf & msg1

24 End If ’ 23 行將 msg1 字串的內容 (電子書 )顯示在 lblshow上

25 End Sub

Page 64: 第五章     選擇結構

27 Private Sub rdbCloud_CheckedChanged(ByVal sender As _ System.Object, ByVal e As System.EventArgs) Handles _ rdbCloud.CheckedChanged

28 Dim strMsg As String ‘ 27~37 行選取雲端運算選項按鈕觸動此事件29 If rdbCloud.Checked = True Then

30 count2 = count2 + 1

31 strMsg = str2 & "(" & Str(count2) & " 次 )"

32 rdbCloud.Text = strMsg

33 lblShow.BackColor = Color.Yellow

34 lblShow.Font = New Font("新細明體 ", 14, FontStyle.Regular)

35 lblShow.Text = rdbCloud.Text & vbCrLf & msg2

36 End If

37 End Sub

Page 65: 第五章     選擇結構

39 Private Sub rdbKinect_CheckedChanged(ByVal sender _ As System.Object, ByVal e As System.EventArgs) _ Handles rdbKinect.CheckedChanged

40 Dim strMsg As String ‘39~49 行選取體感遊戲選項按鈕觸動此事件

41 If rdbKinect.Checked = True Then

42 count3 = count3 + 1

43 strMsg = str3 & "(" & Str(count3) & " 次 )"

44 rdbKinect.Text = strMsg

45 lblShow.BackColor = Color.LightPink

46 lblShow.Font = New Font("新細明體 ", 14, FontStyle.Regular)

47 lblShow.Text = rdbKinect.Text & vbCrLf & msg3

48 End If

49 End Sub

Page 66: 第五章     選擇結構

5-8 核取方塊 CheckBox上節的「選項按鈕」 (RadioButton)只能由多個選項中挑出一個選項。如果要在多個選項中允許可以勾選一個、多個或都不勾選,則需要使用「核取方塊」 (CheckBox)。 (i.e. 允許多選一或多選多 )

Page 67: 第五章     選擇結構

5-8 CheckBox核取方塊 (續 )

Page 68: 第五章     選擇結構

一、核取方塊控制項常用的屬性 (續 )

Page 69: 第五章     選擇結構

二、核取方塊控制項常用的事件當 ThreeState屬性值為 False 時,使用者按「核取方塊」控制項時會依序觸動CheckedChanged、 CheckStateChanged和 Click 三個事件。所以,判斷核取方塊勾選狀態的程式碼,寫在其中任一個事件中皆可。但是,當 ThreeState屬性值為 True 時,若使用者勾選狀態為「未確定」時,是不會觸動CheckedChanged事件。

上述三事件說明如下 :

Page 70: 第五章     選擇結構

二、核取方塊控制項常用的事件 (續 )

1. CheckedChanged事件 當核取方塊控制項的 Checked屬性值改變時,會觸發此事件。

2. CheckStateChanged事件 當核取方塊控制項的 CheckState屬性值改變時,會觸發此事件。

3. Click事件 當核取方塊控制項被滑鼠點選時,會觸發此事件。

Page 71: 第五章     選擇結構
Page 72: 第五章     選擇結構

【問題分析】1. 本例要求當勾選某個核取方塊選項時,馬上顯示 該產品名稱 ; 取消勾選時馬上將該產品名稱由顯 示清單中刪除。而且每次點選時,必須都對四個 核取方塊分別使用 If 敘述,逐一檢查 Checked 屬性是否為 True? 才能完成顯示的工作。這些程 式碼都必須寫在該核取方塊 CheckedChanged 事件處理程序中。2.因尚未介紹共用事件 (第 8章 ) ,所以當每個核取 方塊被點選時都會觸動 CheckedChanged事件, 因此目前需要將相同程式碼分別寫在本例四個核 取方塊的 CheckedChanged事件處理程序中。

Page 73: 第五章     選擇結構

【問題分析】 (續 )

3. 如何對被勾選的核取方塊選項所對應的電子產品 名稱做逐行顯示 :

在欲顯示產品名稱前命使用 & 字串合併符號和 vbCrLf 跳行控制符號。

Page 74: 第五章     選擇結構

【上機】1. 建立表單 :

專案名稱命名為 「 check 」。 表單內建立兩個標籤控制項和四個核取方塊控

制項 :

Page 75: 第五章     選擇結構

【上機】 (續 )

2. 設立各物件屬性 :

物 件預設名稱

Name物件名稱

Text標題

Font/Size 字型大小

Label1 Label1 你希望購買下列… 14

CheckBox1 chkTouch Touch觸控面板 14

CheckBox2 chkMobile 4G手機 14

CheckBox3 chk3DTV 3D 立體電視 14

CheckBox4 chkGame Kinect 體感遊戲機 14

Label2 lblShow Label2 14

Page 76: 第五章     選擇結構

' FileName : check.sln01 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _

System.EventArgs) Handles MyBase.Load02 lblShow.Text = ""03 End Sub04 ' -------------------------------------------------------------------------------------------05 Private Sub chkTouch_CheckedChanged(ByVal sender As System. _

Object, ByVal e As System.EventArgs) Handles chkTouch. _ CheckedChanged ‘5~19 行點選 Touch觸控面板核取方塊選項執行此事件程序

06 lblShow.Text = "你想購買 : "07 If chkTouch.Checked = True Then08 lblShow.Text += vbCrLf & " - Touch觸控面板 "09 End If10 If chkMobile.Checked = True Then11 lblShow.Text += vbCrLf & " - 4G手機 "12 End If13 If chk3DTV.Checked = True Then14 lblShow.Text += vbCrLf & " - 3D 立體電視 "15 End If16 If chkGame.Checked = True Then17 lblShow.Text += vbCrLf & " - Kinect 體感遊戲機 "18 End If19 End Sub

Page 77: 第五章     選擇結構

21 Private Sub chkMobile_CheckedChanged(ByVal sender As _ System.Object, ByVal e As System.EventArgs) Handles _ chkMobile.CheckedChanged

22 lblShow.Text = "你想購買 : "23 If chkTouch.Checked = True Then

24 lblShow.Text += vbCrLf & " - Touch觸控面板 "

25 End If ‘21~35 行點選 4G手機核取方塊選項執行此事件程序26 If chkMobile.Checked = True Then

27 lblShow.Text += vbCrLf & " - 4G手機 "

28 End If

29 If chk3DTV.Checked = True Then

30 lblShow.Text += vbCrLf & " - 3D 立體電視 "

31 End If

32 If chkGame.Checked = True Then

33 lblShow.Text += vbCrLf & " - Kinect 體感遊戲機 "

34 End If

35 End Sub

Page 78: 第五章     選擇結構

37 Private Sub chk3DTV_CheckedChanged(ByVal sender As _ System.Object, ByVal e As System.EventArgs) Handles _ chk3DTV.CheckedChanged

38 lblShow.Text = "你想購買 : "39 If chkTouch.Checked = True Then40 lblShow.Text += vbCrLf & " - Touch觸控面板 "41 End If ‘37~51 行點選 3D 立體電視核取方塊選項執行此事件程

序42 If chkMobile.Checked = True Then43 lblShow.Text += vbCrLf & " - 4G手機 "44 End If45 If chk3DTV.Checked = True Then46 lblShow.Text += vbCrLf & " - 3D 立體電視 "47 End If48 If chkGame.Checked = True Then49 lblShow.Text += vbCrLf & " - Kinect 體感遊戲機 "50 End If51 End Sub

Page 79: 第五章     選擇結構

53 Private Sub chkGame_CheckedChanged(ByVal sender As _ System.Object, ByVal e As System.EventArgs) Handles _ chkGame.CheckedChanged

54 lblShow.Text = "你想購買 : "55 If chkTouch.Checked = True Then56 lblShow.Text += vbCrLf & " - Touch觸控面板 "57 End If ‘ 53~67 行點選 Kinect核取方塊選項執行此事件程序58 If chkMobile.Checked = True Then59 lblShow.Text += vbCrLf & " - 4G手機 "60 End If61 If chk3DTV.Checked = True Then62 lblShow.Text += vbCrLf & " - 3D 立體電視 "63 End If64 If chkGame.Checked = True Then65 lblShow.Text += vbCrLf & " - Kinect 體感遊戲機 "66 End If67 End Sub

Page 80: 第五章     選擇結構

5-9 框架 GroupBox 與面板 Panel建立表單後,可在上面安置許多物件。當移動表單時,上面的物件會隨之移動,我們可以將乘載其它物件的物件稱為「父件」 ( 或稱為收納器 ) ; 而被乘載的物件則稱為「子件」。父件與子件間有下列特性:1. 父件將內部的子件和外部的物件隔離,彼此相互不干擾。如本章介紹的選項按鈕和框架的關係。

2. 子件的座標值是以父件為基準,和其它物件無關。

3. 父件移動時子件亦隨之移動,使得畫面安排更加便利。

Page 81: 第五章     選擇結構

5-9 框架 GroupBox 與面板 Panel (續 )

當一個表單中有許多物件時,可以利用工具箱內的框架 (GroupBox) 或面板 (Panel) 來做分門別類與整體搬移。使用框架 ( 或面板 ) 有下列的好處:1. 將同一性質的控制項集中在框架 ( 或面板 )內,使操作介面更清楚。

2. 多組選項按鈕分別安置在不同的框架 ( 或面板 )中,彼此獨立不會相互干擾。

3. 移動框架 ( 或面板 ) 時,上面的控制項會隨之移動,免除多次調整位置的困擾。

Page 82: 第五章     選擇結構

一、框架的建立1. 選取框架 : 點選工具箱 框架工具。2.拖曳出框架 : 將指標移至表單中適當位置,拖曳出適當大小。

3.修改屬性值 : 修改框架屬性表內的屬性值。4.安置其它物件 : 建立在框架內物件時,必須

在框架內拖曳出來,否則會被視為該控制項在表單上,而不是在框架內。若框架移動時而物件卻沒有跟隨移動,表示該物件並未安置在框架之中。

Page 83: 第五章     選擇結構

二、框架常用的屬性

三、面板的建立 面板控制項 也具備有容器的功能,也可 以有捲軸,但和框架控制項外觀最大的不同是, 左上角無法顯示文字。 1. 選取面板工具 : 點選工具箱 面板工具。 2.拖曳出框架 : 將指標移至表單中適當位置,拖曳

出適當大小。

屬性 說明Text 標題名稱,表示此框架的類別、功能、選項等。

Page 84: 第五章     選擇結構
Page 85: 第五章     選擇結構

【問題分析】1. 使用框架 (Group) 來分類和區隔各選項按鈕以及核取方塊 (CheckBox) 。

2.在 Form1_Load事件處理程序中,預設「豪華配備 (台灣 )」、「生死格鬥」的Checked屬性為 True 。

3. 在確定鈕的 Click事件中,根據各個選項按鈕以及核取方塊設定情形,用選擇結構來計算出採購的總金額。

Page 86: 第五章     選擇結構

【上機】1.建立表單 專案名稱命名為『 GroupBox』。 在表單內,建立如下圖示之控制項。

y941ul320 so4 「生死格鬥」的 Checked屬性為 TrueLabel1

Page 87: 第五章     選擇結構

【上機】 (續 )

2. 設立各物件屬性 :

物 件預設名稱

Name(物件名稱 )

Text(標題 )

Font/Size ( 字型大小 )

GroupBox1 (預設值 ) 主機 (預設值 )

RadioButton1 rdbXboxProTw

豪華配備 (台灣 )15250元

(預設值 )

RadioButton2 rdbXboxPro 豪華配備 12980元 (預設值 )

RadioButton3 rdbXbox 核心配備 9980元 (預設值 )

GroupBox2 (預設值 ) 好禮三選一 (預設值 )

RadioButton4 rdbGame1 生死格鬥英文版 (預設值 )

RadioButton5 rdbGame2 街頭賽車中文版 (預設值 )

RadioButton6 rdbGame3 金剛中文版 加價 100元 (預設值 )

Page 88: 第五章     選擇結構

【上機】 (續 )

2. 設立各物件屬性 :(續 )

物 件預設名稱

Name(物件名稱 )

Text(標題 )

Font/Size ( 字型大小 )

GroupBox3 (預設值 ) 選配 (預設值 )

CheckBox1 chkAdd1 無線控制手把 1390元 (預設值 )

CheckBox2 chkAdd2 64MB記憶卡 1090元 (預設值 )

CheckBox3 chkAdd3 耳機麥克風 650元 (預設值 )

Label1 (預設值 ) XBOX 採購系統 16

Label2 lblMoney 總計 : 12

Button1 btnOK 確定 (預設值 )

Page 89: 第五章     選擇結構

' FileName : GroupBox.sln01 Private Sub Form1_Load(ByVal sender As System.Object, ByVal _

e As System.EventArgs) Handles MyBase.Load02 rdbXboxProTw.Checked = True ‘ 豪華配備 (台灣 )15250元選項按鈕被選取

03 rdbGame1.Checked = True ‘ 豪華配備 12980元選項按鈕被選取04 End Sub05 ' ----------------------------------------------------------------------------------------06 Private Sub btnOK_Click(ByVal sender As System.Object, ByVal _

e As System.EventArgs) Handles btnOK.Click07 Dim money As Integer ‘ 6~16 行執行 GroupBox1(主機 )框架選項按鈕被選取

08 If rdbXboxProTw.Checked = True Then09 money = 1525010 Else11 If rdbXboxPro.Checked = True Then12 money = 1298013 Else14 money = 998015 End If16 End If

Page 90: 第五章     選擇結構

17 If rdbGame3.Checked = True Then money += 100 ‘ GroupBox2 加價選項18 If chkAdd1.Checked = True Then money += 1390 ‘ GroupBox3 選配加價19 If chkAdd2.Checked = True Then money += 1090 ‘ GroupBox3 選配加價20 If chkAdd3.Checked = True Then money += 650 ‘ GroupBox3 選配加價21 lblMoney.Text = " 總計: " & money & "元 " ‘ 累計總價

22 End Sub

Page 91: 第五章     選擇結構

【 5-10 程式範例】使用者輸入用電度,然後選擇用戶別,勾選是否

為「夏日」,最後按計算鈕算出電費多寡。用戶分類 夏月 (6~9月 ) 非夏月

家庭用電

0~110 度 每度 2.1 元 每度 2.1 元111~330 度 每度 2.73 元 每度 2.415 元331~500 度 每度 3.36 元 每度 2.73 元501 度以上 每度 3.465 元 每度 2.73 元

營業用電 每度 3.465 元 每度 2.73 元學校用電 每度 2.1 元 每度 2.1 元

Page 92: 第五章     選擇結構

【編譯偵錯後畫面】

【執行結果】

Page 93: 第五章     選擇結構

【問題分析】1. 利用表單載入時觸動 Form1_Load事件處理程

序,更改相關屬性初值,將用戶別預選「家庭用」即將 redFamily.Checked 設為 True以及將 lblMoney標籤控制項顯示 " 請輸入用電 度數 ! "提示訊息。

2.電費用戶別分為三大類 (僅能三選一,故使用RadioButton 選項按鈕 ) ,所以需要用三個選項按鈕來供選取。利用選項按鈕的 Checked屬性值,配合 If…Then…Else 選擇結構分類計算電價。

Page 94: 第五章     選擇結構

【問題分析】 (續 )

3.因為電費又分為夏日和非夏日兩種計價方式,可以使用核取方塊 (CheckBox)讓使用者勾選。然後利用 IIf函式,來傳回不同的電費。 例如,當使用者勾選夏日時 IIf(chkSummer.Checked,2.73,2.415) ‘傳回 2.73

4. 在計算鈕的 Click事件中,根據各個選項鈕以及核取方塊設定情形,用選擇結構來計算出電費的金額。

5. 在計算鈕的 Click事件中,根據各個選項鈕以及核取方塊四種不同的收費等級,可以用Select…Case 多向選擇結構來設計。

Page 95: 第五章     選擇結構

【上機】1. 建立表單 : .

專案名稱命名為 「 ThePowerRate 」。 在表單內建立下圖所示之控制項 :

rdbHomerdbBusiness

rdbSchool

lblMoney

txtDegree

chkSummer

btnOk

Label1

Label3

GroupBox1 GroupBox2

.

Page 96: 第五章     選擇結構

【上機】 (續 ) 2. 設立各物件屬性 :

物 件預設名稱

Name物件名稱

Text標題

Font/Size 字型大小

Label1 (預設值 ) 電費試算表 14

Label2 lblMoney (預設值 ) 12

Label3 (預設值 ) 請輸入度數 : 12

TextBox1 txtDegree (預設值 ) (預設值 )

GroupBox1 (預設值 ) 用戶別 (預設值 )

RadioButton1 rdbHome 家庭用 (預設值 )

RadioButton2 rdbBusiness 營業用 (預設值 )

RadioButton3 rdbSchool 學校用戶 (預設值 )

GroupBox2 (預設值 ) 選項 (預設值 )

CheckBox1 chkSummer 夏日 (預設值 )

Button1 btnOk 計算 (預設值 )

Page 97: 第五章     選擇結構

【程式碼】

Page 98: 第五章     選擇結構

Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) rdbHome.Checked = True ' 家庭用選項按鈕被選取 lblMoney.Text = " 請輸入用電度數 !" End Sub Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click Dim degree As Integer Dim money As Double degree = Val(txtDegree.Text) ' 從文字方塊 ( 輸入度數 ) 將字串轉為數值 If rdbSchool.Checked = True Then money = degree * 2.1 ' 學校用戶 Else If rdbHome.Checked = True Then ' 家庭用戶 Select Case degree Case Is <= 110 money = degree * IIf(chkSummer.Checked, 2.1, 2.1) Case 111 To 330 money = degree * IIf(chkSummer.Checked, 2.73, 2.415) Case 331 To 500 money = degree * IIf(chkSummer.Checked, 3.36, 2.73) Case Is >= 501 money = degree * IIf(chkSummer.Checked, 3.465, 2.73) End Select Else ' 營業用電 money = degree * IIf(chkSummer.Checked, 3.465, 2.73) End If End If lblMoney.Text = " 電費 = " & money & " 元 " ' 合計應付電費 End SubEnd Class