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

Slides:



Advertisements
Similar presentations
計算機程式及實習 Computer Program Design and Experiment) 期末報告 ppt 南台科技大學機械工程系 姓名 : 蔡中銘 學號 :4A 授課老師 : 謝慶存大帥哥.
Advertisements

南台科技大學 機械工程系 班級 : 車輛三甲 學號 : 學生 : 黃郁鈞.  BMI 值的計算就是 :  體重 / 身高 x 身高  身高需換算成公尺單位計算.
第一單元 建立java 程式.
視窗應用程式表單的基本輸出入 資管系 助理教授 詹曉苓.
題目:徽章之記憶 南台科技大學 機械系 車輛一乙 學號:4A 姓名:黃冠嘉 教師:謝慶存
計算機程式及實習 期末報告 題目:超級猜一猜
計算機程式及實習 期末報告 題目:商店結帳系統
班級:自控四甲 姓名:何禎隆 學號: 老師:謝慶存
ooxx這個遊戲程式,非常的簡單只要你小時候會玩井字遊戲即可把電腦打敗,可以說是一種考智力取勝的遊戲。
課程名稱:程式設計 授課老師:________
08 CSS 基本語法 8-1 CSS 的演進 8-2 CSS 樣式規則與選擇器 8-3 連結HTML 文件與CSS 樣式表
南台科技大學 機械工程系 車輛一甲 學號:4A 學生:黃信成 老師:謝慶存
Visual Basic 2005學習範本 第5章 選擇結構.
題目:台灣客運 南臺科技大學 機械工程系 班級:奈米一乙 學號:4A 姓名:蔡政堯 授課教師:謝慶存
CH10.
Chapter 5 迴圈.
BLANK overview.
課程名稱:程式設計 授課老師:________
第九章 常用控制項(ㄧ) 資訊教育研究室 編著 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
Chapter 1 複習.
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
程式語言 -Visual Basic 條件結構.
第2章 建立Visual Basic應用程式.
程式語言 教學投影片.
2-3 基本數位邏輯處理※.
程式語言 -Visual Basic 變數、常數與資料型態.
第四章 流程控制(一) if,if-else 與 switch
程式語言 I – VISUAL BASIC 選擇結構語法與應用 Chapter 7 認知
Google Data API Spreadsheet
SQL Stored Procedure SQL 預存程序.
第4章 程序控制结构与算法基础.
計算機程式 廖文淵 Department of Computer Science and Engineering
Ch04 流程控制 - 選擇結構(if) 視窗程式設計 授課教師:王大瑾.
Timer & Format.
Visual Basic 物件導向程式設計簡介.
第7章 選擇控制項與條件判斷 [速食店點餐系統]
第4章 視窗應用程式的基本輸出入.
本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載
Ch03 基本輸出入介面設計 視窗程式設計 授課教師:王大瑾.
邏輯關係運算 == 等於 & 且 (logical and) ~= 不等於 | 或 (logical or) < 小於
第4章 視窗應用程式的基本輸出入 4-1 物件基礎程式設計 4-2 表單控制項 4-3 按鈕控制項 4-4 資料輸出的標籤控制項
第一單元 建立java 程式.
題目:南台飲料店結帳系統 南台科技大學 機械工程系 車輛一甲 學號:4A
標籤、按鈕、工具列、狀態列 (Labels, Buttons, Tool Strips, and Status Strips)
網頁程式設計 本章投影片錄自HTML5、CSS3、RWD、jQuery Mobile跨裝網頁設計 陳惠貞 著 碁峰資訊股份有限公司出版
FileUpload控制項 建國科技大學 資管系 饒瑞佶 2007年.
Ch20. 計算器 (Mac 版本).
第六章 選擇結構 (應用:核取方塊、選項按鈕、框架)
第 19 章 XML記憶體執行模式.
計算機程式及實習 Computer Program Design and Experiment) 期末報告ppt製作 南台科技大學 機械工程系 題目:南台電影城結帳系統 班級 : 車輛一甲 學號 : 4A 授教學生: 阮偉倫 授課老師: 謝慶存.
計算機概論與實習期末報告 老師:謝慶存 4a415057賴震製作.
打地鼠(陣列版).
CH05. 選擇敘述.
期末考.
挑戰C++程式語言 ──第8章 進一步談字元與字串
程式邏輯結構 Chapter 6 認知 認識何謂流程圖及流程圖各種符號的意義。
雙按button1,2,3,4 Method 方法/動作 textBox2.Text textBox1 textBox3.Text 轉為數字 c是數字 int c = int.Parse(textBox1.Text) + …; textBox3.Text = c.ToString();
Controls.
GridView.
GridView操作 (II).
HelloPurr_Extend 靜宜大學資管系 楊子青
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
函數應用(二)與自定函數.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
Cloud Training Material- 事件 Sherman Wang
適用於多選一 可減少if 與 else配對混淆的錯誤.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Unix指令4-文字編輯與程式撰寫.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

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

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

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

【例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

二、邏輯運算式 邏輯運算子可將多個關係運算式結合成較複雜的邏輯運算式。 用 法 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運算元可以是關係運算式、布林變數和布林常值。

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

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

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

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

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

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

2. 使用流程圖表示

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

一. 循序結構

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

2. 雙向選擇結構

3. 多向選擇結構

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

前測式迴圈

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

5-4 選擇敘述

一. 單向選擇的 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

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

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

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

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

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

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

Label1 Label2

【問題分析】 本例可使用多種解法,如巢狀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敘述。

【上機】 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 結束

' FileName :grade.sln 01 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 >= 70) Then ‘ 成績>=70執行第5行,否則執行第7行 05 lblShow.Text = "等第 : " & IIf(score >= 80, "A", "B") 06 Else ‘ 5行: 使用IIF,成績>=80為A否則為B 07 lblShow.Text = "等第 : " & IIf(score >= 60, "C", "D") 08 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 12 End 13 End Sub

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

巢狀選擇敘述的流程圖

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

80

' FileName :NestIf.sln 01 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

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

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

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

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

一些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。

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

' FileName :Tax.sln 01 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 02 Dim income, discount, tax As Integer '所得淨額,所得稅 03 Dim tax_rate As Single '稅率 04 Dim msg As String 05 income = Val(InputBox("請輸入今年的綜合所得淨額:", " _ 綜合所得稅")) '用InputBox函式輸入綜合所得淨額 06 msg = "綜合所得稅" & vbNewLine 07 Select Case income 08 Case Is <= 370000 09 tax_rate = 0.06 10 discount = 0 11 Case 370001 To 990000 12 tax_rate = 0.13 13 discount = 25900 14 Case 990001 To 1980000 15 tax_rate = 0.21 16 discount = 105100

17 Case 1980001 To 3720000 18 tax_rate = 0.3 19 discount = 283300 20 Case Is >= 3720001 21 tax_rate = 0.4 22 discount = 655300 23 End Select 24 tax = income * tax_rate ‘ 稅金=綜合所得淨額 * 稅率 25 msg &= "綜合所得淨額: " & Format(income, " #,###") & "元" _ & vbNewLine 26 msg &= "稅    率:" & Format(tax_rate, "0%") & vbNewLine 27 msg &= "------------------------------------------" & vbNewLine 28 msg &= "稅  金:" & Format(tax, "#,##0") & "元" & vbNewLine 29 msg &= "累 進 差 額:" & Format(discount, "#,##0") & "元" & _ vbNewLine 30 msg &= "------------------------------------------" & vbNewLine 31 msg &= "今年應納稅額:" & Format(tax - discount, "#,##0") & "元" 32 MsgBox(msg) ‘MsgBox敘述 ; 31行:全年應納稅額=稅金 – 累進差額 33 End 34 End Sub

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

三、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。

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

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

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

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

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

Label1 選項按鈕 1~3 RadioButton Label2

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

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

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

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

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

Label1

' 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 06 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

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

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

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

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

5-8 CheckBox核取方塊(續)

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

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

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

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

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

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

【上機】(續) 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

' FileName : check.sln 01 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles MyBase.Load 02 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觸控面板核取方塊選項執行此事件程序 06 lblShow.Text = "你想購買 : " 07 If chkTouch.Checked = True Then 08 lblShow.Text += vbCrLf & " - Touch觸控面板 " 09 End If 10 If chkMobile.Checked = True Then 11 lblShow.Text += vbCrLf & " - 4G手機 " 12 End If 13 If chk3DTV.Checked = True Then 14 lblShow.Text += vbCrLf & " - 3D立體電視 " 15 End If 16 If chkGame.Checked = True Then 17 lblShow.Text += vbCrLf & " - Kinect體感遊戲機 " 18 End If 19 End Sub

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

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 38 lblShow.Text = "你想購買 : " 39 If chkTouch.Checked = True Then 40 lblShow.Text += vbCrLf & " - Touch觸控面板 " 41 End If ‘37~51行點選3D立體電視核取方塊選項執行此事件程序 42 If chkMobile.Checked = True Then 43 lblShow.Text += vbCrLf & " - 4G手機 " 44 End If 45 If chk3DTV.Checked = True Then 46 lblShow.Text += vbCrLf & " - 3D立體電視 " 47 End If 48 If chkGame.Checked = True Then 49 lblShow.Text += vbCrLf & " - Kinect體感遊戲機 " 50 End If 51 End Sub

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 54 lblShow.Text = "你想購買 : " 55 If chkTouch.Checked = True Then 56 lblShow.Text += vbCrLf & " - Touch觸控面板 " 57 End If ‘ 53~67行點選Kinect核取方塊選項執行此事件程序 58 If chkMobile.Checked = True Then 59 lblShow.Text += vbCrLf & " - 4G手機 " 60 End If 61 If chk3DTV.Checked = True Then 62 lblShow.Text += vbCrLf & " - 3D立體電視 " 63 End If 64 If chkGame.Checked = True Then 65 lblShow.Text += vbCrLf & " - Kinect體感遊戲機 " 66 End If 67 End Sub

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

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

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

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

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

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

【上機】(續) 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元

【上機】(續) 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 確定

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 02 rdbXboxProTw.Checked = True ‘ 豪華配備(台灣)15250元選項按鈕被選取 03 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 07 Dim money As Integer ‘ 6~16行執行GroupBox1(主機)框架選項按鈕被選取 08 If rdbXboxProTw.Checked = True Then 09 money = 15250 10 Else 11 If rdbXboxPro.Checked = True Then 12 money = 12980 13 Else 14 money = 9980 15 End If 16 End If

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

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

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

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

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

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

【上機】(續) 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 計算

【程式碼】

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