Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載"— Presentation transcript:

1 本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載
第五章 選擇結構 本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載

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

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

4 【例3】#3/17/2006# >= #1/1/2006# 結果為True。
【例2】 "a" > "b"  結果為 False ‘ a 的ASCII碼為97 , b 的ASCII碼為98 【例3】#3/17/2006# >= #1/1/2006# 結果為True。 【例4】身高(tall)不超過186 的條件式:  tall <= 186

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 B A、B中必須有一個為真且一個為假,結果才為真 A和B運算元可以是關係運算式、布林變數和布林常值。

6 【例1】小明總成績 (score)為92,操行等第(grade) 為甲。請檢查下列指定條件式各種邏輯運算的 結果。
A和B運算元可以是關係運算式、布林變數和布林常值。 A B A And B A Or B Not A A Xor B 【例1】小明總成績 (score)為92,操行等第(grade) 為甲。請檢查下列指定條件式各種邏輯運算的 結果。 (score >=90) And (grade= "甲") 【例2】 請寫出成績 60 ≦score < 80之間的條件式 結果為真 (score>=60) And (score<80)

7 5-2 演算法(algorithm)介紹 為解決某一特定問題規劃出來 一系列有順序且明確的步驟。 好的演算法滿足下列五條件: 1. 有限性
2. 明確性 3. 輸入資料 4. 輸出資料 5. 有效性

8 演算法方式 : 1. 虛擬碼(Pseudo Code): 即一般口語語文描述處理問題的步驟 2. 流程圖 (Flow Chart)

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

10 二、流程圖 (Flow Chart) 流程圖就是利用簡明的圖形符號,來表示程式處理問題的步驟和方法。
它藉著各種不同的圖形和箭頭來表達解決問題的順序。 每一種圖形代表一種作業功能。

11

12 使用虛擬碼和流程圖描述輸入成績求總和的步驟
1. 使用虛擬碼表示 Step1 令總和(sum) = 0 Step2 輸入成績(score) Step3 若 score >= 0,則繼續下一步驟; 否則跳 到 Step 6 Step4 令 sum = sum + score Step5 跳回 Step 2繼續執行 Step6 印出 sum Step7 結束程式執行

13 2. 使用流程圖表示

14 5-3 結構化程式設計 結構化程式設計是發展軟體所採用的一項基本程式設計技術。 包括 1. 使用循序、選擇和重覆結構。 2. 由上而下設計。
3. 模組獨立。

15 一. 循序結構

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

17 2. 雙向選擇結構

18 3. 多向選擇結構

19 三. 重複結構 程式中某一敘述區段需要反覆地執行,一直到符合或是不符合某一條件時,才離開重覆執行的敘述區段。
條件式由關係、邏輯及算術運算式組成 稱為迴圈 (Loop)。 重覆結構可分為下列兩種: 1. 前測式重覆結構 2. 後測式重覆結構

20 前測式迴圈

21 後測式迴圈 敘述區段A至少會執行一次

22 5-4 選擇敘述

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要先清為0

24 二、雙向選擇的 If … Then … Else 敘述
 敘述區段A Else  敘述區段B End If

25 【例】使用雙向選擇結構來判斷  若sex = "男",顯示 "先生,您好! "  若sex = "女",顯示 "小姐, 您好! " Dim sex As String = "女" If sex = "男" Then Label1.Text = "先生, 您好 !" Else Label1.Text = "小姐, 您好 !" End If

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

27 【例】 若成績(score)  60 輸出對話方塊顯示“及格”, 否則顯示"不及格"。 1. 使用 If … Then … Else 敘述 If score > =60 Then MsgBox("及格") Else MsgBox("不及格") End If

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 )))

29 範例 試使用一個If敘述和兩個IIF函式來做分數(score)和等第(grade)換算作業。
條件:  0  score <60  grade = "D"  60  score <70  grade = "C"  70  score <80  grade = "B"  80  score  grade = "A"

30 Label1 Label2

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敘述。

32 【上機】 1. 建立表單: 專案名稱命名為 "grade"。 在表單內建立輸出入介面(如P.30所示) 2. 設立各物件屬性: 物 件
1. 建立表單: 專案名稱命名為 "grade"。 在表單內建立輸出入介面(如P.30所示) 2. 設立各物件屬性: 物 件 預設名稱 Name 物件名稱 Text 標題 Font/Size 字型大小 Label1 (預設值) 成績等第換算 12 Label2 成績 : Label3 lblShow 等第 : TextBox1 txtScore 空字串 Button1 btnOk 確定 Button2 btnEnd 結束

33 ' FileName :grade.sln 01 Private Sub btnOk_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnOk.Click Dim score As Integer score = Val(txtScore.Text) If (score >= 70) Then ‘ 成績>=70執行第5行,否則執行第7行 lblShow.Text = "等第 : " & IIf(score >= 80, "A", "B") Else ‘ 5行: 使用IIF,成績>=80為A否則為B lblShow.Text = "等第 : " & IIf(score >= 60, "C", "D") End If ‘ 7行: 使用IIF,成績>=60為C否則為D 09 End Sub 10 ' 11 Private Sub btnEnd_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnEnd.Click End 13 End Sub

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

35 巢狀選擇敘述的流程圖

36 試做分數(score)和等第(grade)換算作業。
 0  score <60  grade = "D"  60  score <70  grade = "C"  70  score <80  grade = "B"  80  score  grade = "A" Label1 Label2

37 80

38 ' FileName :NestIf.sln 01 Private Sub btnOK_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnOK.Click Dim score As Integer score = Val(txtScore.Text) If (score < 0 Or score > 100) Then MsgBox("分數超出範圍 限 0~100 ") txtScore.Text = "" Else If (score >= 70) Then If (score >= 80) Then lblShow.Text = " 等第: A " Else lblShow.Text = " 等第: B " End If

39 Else If (score >= 60) Then lblShow.Text = " 等第: C " Else lblShow.Text = " 等第: D " End If 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 End 25 End Sub

40 5-6 多向選擇 當選擇條件超過兩種以上時:  可用上節介紹的巢狀選擇敘述,如太多層巢狀
If敘述將增加程式複雜度。  改用多向選擇,可讀性高且具結構化。  多向選擇敘述將依程式條件式的測試結果,分 成各個執行路徑,不同結果執行不同的敘述區 段。

41 本節介紹三種多向選擇: 1. Select Case敘述 2. Choose函式 3. Switch函式

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

43 一些Case運算式(數值或字串運算式)子句常用測試值寫法
【例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。

44

45 使用 InputBox函式顯示輸入對話方塊
標題 提示訊息 按鈕1 按鈕2 預設值

46 ' FileName :Tax.sln 01 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim income, discount, tax As Integer '所得淨額,所得稅 Dim tax_rate As Single '稅率 Dim msg As String income = Val(InputBox("請輸入今年的綜合所得淨額:", " _ 綜合所得稅")) '用InputBox函式輸入綜合所得淨額 msg = "綜合所得稅" & vbNewLine Select Case income Case Is <= tax_rate = 0.06 discount = 0 Case To tax_rate = 0.13 discount = 25900 Case To tax_rate = 0.21 discount =

47 Case To tax_rate = 0.3 discount = Case Is >= tax_rate = 0.4 discount = End Select tax = income * tax_rate ‘ 稅金=綜合所得淨額 * 稅率 msg &= "綜合所得淨額: " & Format(income, " #,###") & "元" _ & vbNewLine msg &= "稅    率:" & Format(tax_rate, "0%") & vbNewLine msg &= " " & vbNewLine msg &= "稅  金:" & Format(tax, "#,##0") & "元" & vbNewLine msg &= "累 進 差 額:" & Format(discount, "#,##0") & "元" & _ vbNewLine msg &= " " & vbNewLine msg &= "今年應納稅額:" & Format(tax - discount, "#,##0") & "元" MsgBox(msg) ‘MsgBox敘述 ; 31行:全年應納稅額=稅金 – 累進差額 End 34 End Sub

48 二、Choose函式 Choose函式會根據第一個引述的值,傳回相對的對應值 【例1】
res = Choose(i,"一","二","三","四");如果i=2時,res = "二" 。 【例2】 res = Choose(i,"1","one","一","壹"):  如果 i=3 時,res = "一";  如果 i=5 時,res 為Null。

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。

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

51 此對話方塊共有「發牌」、「計分」兩組選項按鈕。發牌部分只能二選一,計分部分只能三選一。
可以在程式中預設同群組中某個選項按鈕被點選,或全部預設都未點選。 選項按鈕 RadioButton 遊樂場中的接龍程式對話方塊

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

53 二、選項按鈕控制項常用的事件 當在選項按鈕控制項上按一下,會變更Checked 屬性值,且同時依序觸動CheckedChanged和 Click兩個事件。但如果該按鈕已被選取,在重 複點選時,因為Checked屬性值未變,所以只 會觸動Click事件。 一般設計程式時,通常會將判斷選項按鈕是否被 點選的程式碼寫在CheckedChanged事件處理 程序中。

54 兩事件使用上差異如下 : 1. CheckedChanged事件 為選項按鈕控制項的預設事件。當選項按鈕的 Checked 屬性值改變時會觸發此事件,用來判斷使用者到底選擇哪個選項按鈕。 2. Click事件 只要選項按鈕控制項被滑鼠點選時都 會觸發此事件。

55 Label1 選項按鈕 1~3 RadioButton Label2

56 【問題分析】 1.本例要求點選選項按鈕除在表單的標籤控制項上 顯示該新知訊息外,亦必須在選項按鈕的Text標 題文字後累加點閱次數。請注意,若該鈕已被點 選,再按該鈕時點閱次數不累加。 2.如何宣告本程式使用到的變數 : 使用msg1~msg3字串變數分別存放各類新知 訊息內容。 使用count1~count3整數變數紀錄各類新知點 按累加次數。 str1~str3字串變數存放各選項按鈕的標題文 字。 因上述三類變數在各事件處理程序均會參用到, 所以必須在所有事件處理程序前就要宣告。

57 【問題分析】(續) 3.當在選項按鈕按一下會觸動該按鈕的Click和CheckedChanged事件,如何選擇哪個事件來顯示專有名詞內容及其點閱次數加1 : 若將此程式碼寫在該按鈕的click事件,會導致只要在該按鈕按一次即累加一次,即便是該按鈕目前已點選顯示其內容。 若將此程式碼寫在該按鈕的CheckedChanged事件,只要該按鈕的Checked屬性值由True轉成False或由False轉成True才會觸動此事件。

58 【問題分析】(續) 4.如何在CheckedChanged事件顯示專有名詞內容及其點閱次數加1 : 使用If敘述檢查Checked屬性是否為True? 若Checked=True,該按鈕的點閱次數加1,並將次數顯示在該選項按鈕的標題文字上面。同時將專有名詞內容顯示在lblShow標籤控制項上面。 若Checked=False,不做任何事離開該事件處理程序。

59 【問題分析】(續) 5.表單載入時執行Form1_Load事件處理程序,先設定欄位變數的初值 : count1~ count3變數存放點閱次數,初值設為0。 str1~ str3字串變數存放電子書、雲端運算、體感遊戲名稱。 設定msg1字串變數存放電子書的內容(如課本)。 設定msg2字串變數存放雲端運算的內容(如課本)。 設定msg3字串變數存放體感遊戲的內容(如課本)

60 【上機】 1. 建立表單: 專案名稱命名為「radibtn」。 在表單內建立輸出入介面(如次頁所示) 2. 設立各物件屬性: 物 件
1. 建立表單: 專案名稱命名為「radibtn」。 在表單內建立輸出入介面(如次頁所示) 2. 設立各物件屬性: 物 件 預設名稱 Name 物件名稱 Text 標題 AutoSize Label1 資訊產業新知報導 True RadioButton1 rdbeBook 電子書 rdbCloud 雲端運算 rdbKinect 體感遊戲 Label2 lblShow False

61 Label1

62 ' FileName :radibtn.sln 01 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.Load msg1 = "電子書( e-book)指數位化書籍以電子檔透過網路下載至 PC、筆電、PDA、手機、或可存大量數位教材(如 iPad),………… 以往繁雜出版流程。" msg2 = "雲端運算(Cloud computing)是目前資訊產業最夯的 議題。是一種網際網路資源利用的新方式,簡言之就 是把所有……………....軟體共享、平台共享( Youtube 、facebook、Blocker等)" msg3 = "體感遊戲器(Kinect)是微軟新一代體感遊戲機套件Kinect 於2010年底上市,以光學鏡頭辨識臉孔、追蹤玩家身體 動作、 ……………… 就可當舞神了。" count1 = 0 : count2 = 0 : count3 = 0 ‘ 5~13行表單載入時執行此區段 str1 = rdbeBook.Text ‘ 設定變數初值(電子書) str2 = rdbCloud.Text ‘ 設定變數初值(雲端運算) str3 = rdbKinect.Text ‘ 設定變數初值(體感遊戲) 13 End Sub

63 15 Private Sub rdbeBook_CheckedChanged(ByVal sender …) _ Handles rdbeBook.CheckedChanged
Dim strMsg As String ‘ 15~25行選取電子書選項按鈕觸動此事件 If rdbeBook.Checked =True then ‘ 17~24行當Checked屬性為 count1 = count ‘ True時,才將點閱次數加1 strMsg = str1 & "(" & Str(count1) & " 次) " rdbeBook.Text = strMsg lblShow.BackColor = Color.Aqua lblShow.Font = New Font("新細明體" , 14 , FontStyle.Regular) lblShow.Text = rdbeBook.Text & vbCrLf & msg1 End If ’ 23行將msg1字串的內容(電子書)顯示在lblshow上 25 End Sub

64 27 Private Sub rdbCloud_CheckedChanged(ByVal sender As _ System
27 Private Sub rdbCloud_CheckedChanged(ByVal sender As _ System.Object, ByVal e As System.EventArgs) Handles _ rdbCloud.CheckedChanged Dim strMsg As String ‘ 27~37行選取雲端運算選項按鈕觸動此事件 If rdbCloud.Checked = True Then count2 = count2 + 1 strMsg = str2 & "(" & Str(count2) & " 次)" rdbCloud.Text = strMsg lblShow.BackColor = Color.Yellow lblShow.Font = New Font("新細明體", 14, FontStyle.Regular) lblShow.Text = rdbCloud.Text & vbCrLf & msg2 End If 37 End Sub

65 39 Private Sub rdbKinect_CheckedChanged(ByVal sender _ As System
39 Private Sub rdbKinect_CheckedChanged(ByVal sender _ As System.Object, ByVal e As System.EventArgs) _ Handles rdbKinect.CheckedChanged Dim strMsg As String ‘39~49行選取體感遊戲選項按鈕觸動此事件 If rdbKinect.Checked = True Then count3 = count3 + 1 strMsg = str3 & "(" & Str(count3) & " 次)" rdbKinect.Text = strMsg lblShow.BackColor = Color.LightPink lblShow.Font = New Font("新細明體", 14, FontStyle.Regular) lblShow.Text = rdbKinect.Text & vbCrLf & msg3 End If 49 End Sub

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

67 5-8 CheckBox核取方塊(續)

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

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

70 二、核取方塊控制項常用的事件(續) 1. CheckedChanged事件 當核取方塊控制項的Checked屬性值改變時, 會觸發此事件。
2. CheckStateChanged事件 當核取方塊控制項的CheckState屬性值改變時,會觸發此事件。 3. Click事件 當核取方塊控制項被滑鼠點選時,會觸發此事件。

71

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

73 【問題分析】(續) 3.如何對被勾選的核取方塊選項所對應的電子產品 名稱做逐行顯示 : 在欲顯示產品名稱前命使用 & 字串合併符號和 vbCrLf跳行控制符號。

74 【上機】 1. 建立表單: 專案名稱命名為 「check」。 表單內建立兩個標籤控制項和四個核取方塊控 制項 :

75 【上機】(續) 2. 設立各物件屬性: 物 件 預設名稱 Name 物件名稱 Text 標題 Font/Size 字型大小 Label1
物 件 預設名稱 Name 物件名稱 Text 標題 Font/Size 字型大小 Label1 你希望購買下列… 14 CheckBox1 chkTouch Touch觸控面板 CheckBox2 chkMobile 4G手機 CheckBox3 chk3DTV 3D立體電視 CheckBox4 chkGame Kinect體感遊戲機 Label2 lblShow

76 ' FileName : check.sln 01 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles MyBase.Load lblShow.Text = "" 03 End Sub 04 ' 05 Private Sub chkTouch_CheckedChanged(ByVal sender As System. _ Object, ByVal e As System.EventArgs) Handles chkTouch. _ CheckedChanged ‘5~19行點選Touch觸控面板核取方塊選項執行此事件程序 lblShow.Text = "你想購買 : " If chkTouch.Checked = True Then lblShow.Text += vbCrLf & " - Touch觸控面板 " End If If chkMobile.Checked = True Then lblShow.Text += vbCrLf & " G手機 " End If If chk3DTV.Checked = True Then lblShow.Text += vbCrLf & " D立體電視 " End If If chkGame.Checked = True Then lblShow.Text += vbCrLf & " - Kinect體感遊戲機 " End If 19 End Sub

77 21 Private Sub chkMobile_CheckedChanged(ByVal sender As _ System
21 Private Sub chkMobile_CheckedChanged(ByVal sender As _ System.Object, ByVal e As System.EventArgs) Handles _ chkMobile.CheckedChanged lblShow.Text = "你想購買 : " If chkTouch.Checked = True Then lblShow.Text += vbCrLf & " - Touch觸控面板 " End If ‘21~35行點選4G手機核取方塊選項執行此事件程序 If chkMobile.Checked = True Then lblShow.Text += vbCrLf & " G手機 " End If If chk3DTV.Checked = True Then lblShow.Text += vbCrLf & " D立體電視 " End If If chkGame.Checked = True Then lblShow.Text += vbCrLf & " - Kinect體感遊戲機 " End If 35 End Sub

78 37 Private Sub chk3DTV_CheckedChanged(ByVal sender As _ System
37 Private Sub chk3DTV_CheckedChanged(ByVal sender As _ System.Object, ByVal e As System.EventArgs) Handles _ chk3DTV.CheckedChanged lblShow.Text = "你想購買 : " If chkTouch.Checked = True Then lblShow.Text += vbCrLf & " - Touch觸控面板 " End If ‘37~51行點選3D立體電視核取方塊選項執行此事件程序 If chkMobile.Checked = True Then lblShow.Text += vbCrLf & " G手機 " End If If chk3DTV.Checked = True Then lblShow.Text += vbCrLf & " D立體電視 " End If If chkGame.Checked = True Then lblShow.Text += vbCrLf & " - Kinect體感遊戲機 " End If 51 End Sub

79 53 Private Sub chkGame_CheckedChanged(ByVal sender As _ System
53 Private Sub chkGame_CheckedChanged(ByVal sender As _ System.Object, ByVal e As System.EventArgs) Handles _ chkGame.CheckedChanged lblShow.Text = "你想購買 : " If chkTouch.Checked = True Then lblShow.Text += vbCrLf & " - Touch觸控面板 " End If ‘ 53~67行點選Kinect核取方塊選項執行此事件程序 If chkMobile.Checked = True Then lblShow.Text += vbCrLf & " G手機 " End If If chk3DTV.Checked = True Then lblShow.Text += vbCrLf & " D立體電視 " End If If chkGame.Checked = True Then lblShow.Text += vbCrLf & " - Kinect體感遊戲機 " End If 67 End Sub

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

81 5-9 框架GroupBox與面板Panel (續)
當一個表單中有許多物件時,可以利用工具箱內 的框架(GroupBox)或面板(Panel)來做分門別類 與整體搬移。使用框架(或面板)有下列的好處: 1. 將同一性質的控制項集中在框架(或面板)內, 使操作介面更清楚。 2. 多組選項按鈕分別安置在不同的框架(或面板) 中,彼此獨立不會相互干擾。 3. 移動框架(或面板)時,上面的控制項會隨之移 動,免除多次調整位置的困擾。

82 一、框架的建立 1.選取框架 : 點選工具箱 框架工具。 2.拖曳出框架 : 將指標移至表單中適當位置,拖曳出適當大小。 3.修改屬性值 : 修改框架屬性表內的屬性值。 4.安置其它物件 : 建立在框架內物件時,必須在框架內拖曳出來,否則會被視為該控制項在表單上,而不是在框架內。若框架移動時而物件卻沒有跟隨移動,表示該物件並未安置在框架之中。

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

84

85 【問題分析】 1.使用框架(Group)來分類和區隔各選項按鈕以及核取方塊(CheckBox)。 2.在Form1_Load事件處理程序中,預設「豪華配備(台灣)」、「生死格鬥」的Checked屬性為True。 3.在確定鈕的Click事件中,根據各個選項按鈕以及核取方塊設定情形,用選擇結構來計算出採購的總金額。

86 【上機】 1.建立表單 專案名稱命名為『GroupBox』。 在表單內,建立如下圖示之控制項。 y941ul320 so4 「生死格鬥」的Checked屬性為True
Label1

87 【上機】(續) 2. 設立各物件屬性: 物 件 預設名稱 Name (物件名稱) Text (標題) Font/Size (字型大小)
物 件 預設名稱 Name (物件名稱) Text (標題) Font/Size (字型大小) GroupBox1 (預設值) 主機 RadioButton1 rdbXboxProTw 豪華配備(台灣)15250元 RadioButton2 rdbXboxPro 豪華配備12980元 RadioButton3 rdbXbox 核心配備9980元 GroupBox2 好禮三選一 RadioButton4 rdbGame1 生死格鬥英文版 RadioButton5 rdbGame2 街頭賽車中文版 RadioButton6 rdbGame3 金剛中文版 加價100元

88 【上機】(續) 2. 設立各物件屬性:(續) 物 件 預設名稱 Name (物件名稱) Text (標題) Font/Size (字型大小)
物 件 預設名稱 Name (物件名稱) Text (標題) Font/Size (字型大小) GroupBox3 (預設值) 選配 CheckBox1 chkAdd1 無線控制手把 1390元 CheckBox2 chkAdd2 64MB記憶卡 1090元 CheckBox3 chkAdd3 耳機麥克風 650元 Label1 XBOX採購系統 16 Label2 lblMoney 總計 : 12 Button1 btnOK 確定

89 02 rdbXboxProTw.Checked = True ‘ 豪華配備(台灣)15250元選項按鈕被選取
' FileName : GroupBox.sln 01 Private Sub Form1_Load(ByVal sender As System.Object, ByVal _ e As System.EventArgs) Handles MyBase.Load rdbXboxProTw.Checked = True ‘ 豪華配備(台灣)15250元選項按鈕被選取 rdbGame1.Checked = True ‘ 豪華配備12980元選項按鈕被選取 04 End Sub 05 ' 06 Private Sub btnOK_Click(ByVal sender As System.Object, ByVal _ e As System.EventArgs) Handles btnOK.Click Dim money As Integer ‘ 6~16行執行GroupBox1(主機)框架選項按鈕被選取 If rdbXboxProTw.Checked = True Then money = 15250 Else If rdbXboxPro.Checked = True Then money = 12980 Else money = 9980 End If End If

90 17 If rdbGame3.Checked = True Then money += 100 ‘ GroupBox2加價選項
If chkAdd1.Checked = True Then money += ‘ GroupBox3選配加價 If chkAdd2.Checked = True Then money += ‘ GroupBox3選配加價 If chkAdd3.Checked = True Then money += ‘ GroupBox3選配加價 lblMoney.Text = "總計: " & money & "元" ‘ 累計總價 22 End Sub

91 使用者輸入用電度,然後選擇用戶別,勾選是否為「夏日」,最後按計算鈕算出電費多寡。
【5-10 程式範例】 使用者輸入用電度,然後選擇用戶別,勾選是否為「夏日」,最後按計算鈕算出電費多寡。 用戶分類 夏月(6~9月) 非夏月 0~110度 每度2.1元 111~330度 每度2.73元 每度2.415元 331~500度 每度3.36元 501度以上 每度3.465元 營業用電 學校用電

92 【編譯偵錯後畫面】 【執行結果】

93 【問題分析】 1.利用表單載入時觸動Form1_Load事件處理程序,更改相關屬性初值,將用戶別預選「家庭用」即將redFamily.Checked設為True以及將lblMoney標籤控制項顯示"請輸入用電 度數! "提示訊息。 2.電費用戶別分為三大類(僅能三選一,故使用RadioButton選項按鈕),所以需要用三個選項按鈕來供選取。利用選項按鈕的Checked屬性值,配合If…Then…Else選擇結構分類計算電價。

94 【問題分析】(續) 3.因為電費又分為夏日和非夏日兩種計價方式,可以使用核取方塊(CheckBox)讓使用者勾選。然後利用IIf函式,來傳回不同的電費。 例如,當使用者勾選夏日時IIf(chkSummer.Checked,2.73,2.415) ‘傳回2.73 4.在計算鈕的Click事件中,根據各個選項鈕以及核取方塊設定情形,用選擇結構來計算出電費的金額。 5.在計算鈕的Click事件中,根據各個選項鈕以及核取方塊四種不同的收費等級,可以用Select…Case多向選擇結構來設計。

95 【上機】 1. 建立表單: . 專案名稱命名為 「ThePowerRate」。 在表單內建立下圖所示之控制項 :
Label1 txtDegree Label3 GroupBox2 GroupBox1 . rdbHome chkSummer rdbBusiness rdbSchool lblMoney btnOk

96 【上機】(續) 2. 設立各物件屬性: 物 件 預設名稱 Name 物件名稱 Text 標題 Font/Size 字型大小 Label1
物 件 預設名稱 Name 物件名稱 Text 標題 Font/Size 字型大小 Label1 (預設值) 電費試算表 14 Label2 lblMoney 12 Label3 請輸入度數 : TextBox1 txtDegree GroupBox1 用戶別 RadioButton1 rdbHome 家庭用 RadioButton2 rdbBusiness 營業用 RadioButton3 rdbSchool 學校用戶 GroupBox2 選項 CheckBox1 chkSummer 夏日 Button1 btnOk 計算

97 【程式碼】

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 * ' 學校用戶 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 ' 營業用電 End If lblMoney.Text = "電費 = " & money & "元" ' 合計應付電費 End Class


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

Similar presentations


Ads by Google