第五章 選擇控制項
5-1 選擇控制項介紹 一. 關於 RadioButton 選項按鈕控制項 當表單中有多個同性質的選項且只能單選時就需用到選項按鈕控制項 選項按鈕控制項彼此間是互斥 當有一個選項按鈕被點選時 - 該按鈕的 Checked =True, - 其它按鈕的 Checked = False
選項按鈕常用屬性和事件
程式設計技巧 1. 選項按鈕必須先將 Enabled 屬性設為 True 才能允許被點選 2. 同群組中有多個選項按鈕時 : 在未被點選的選項按鈕上按一下選取, 該按鈕 Checked 屬性 False True, 該按鈕的 CheckedChanged 和 Click 事件被觸發 上次剛被選取選項按鈕自動變成未被點選 Checked 屬性由 True False, 該按鈕的 CheckedChanged 事件亦被觸動此選項按鈕並未做點選動作,Click 事件不觸發 其它選項按鈕的屬性維持不變 ( 即 Checked =False) Click 及 CheckedChanged 事件未被觸發
3. 同一群組中有多個選項按鈕, 若在已被點選的按鈕上按一下, 該按鈕的 Checked 屬性仍維持為 True 但該按鈕的 Click 事件被觸動,CheckedChanged 事件不會觸動 4. 程式執行時如何用 If 選擇敘述檢查 RadioButton1 選項按鈕是否被點選? 若被點選, 執行敘述區段 1; 若未被點選, 執行敘述區段 2:
4. 程式中如何使用 IIf 函式檢查 RadioButton1 是否被點選? 若 RadioButton1 被點選時, 傳回值為資料 1, 若未被點選傳回值為資料 2, 兩者傳回值都指定給 var1 變數, 寫法 :
簡例 1 當在下圖中三個選項按鈕之一按一下, 馬上透過該按鈕的 CheckedChanged 事件在標籤控制項上面顯示你購買多少吋的 LED 液晶電視和價格
03 Private Sub RadioButton1_CheckedChanged(ByVal ) _ Handles RadioButton1.CheckedChanged 04 lblshow.text = " 你購買 32 吋 LED 液晶電視金額為 18,000 元 " 05 End Sub 06 07 Private Sub RadioButton2_CheckedChanged(ByVal ) _ Handles RadioButton2.CheckedChanged 08 lblshow.text = " 你購買 42 吋 LED 液晶電視金額為 32,000 元 " 09 End Sub 10 11 Private Sub RadioButton3_CheckedChanged(ByVal ) _ Handles RadioButton3.CheckedChanged 12 lblshow.text = " 你購買 47 吋 LED 液晶電視金額為 45,000 元 " 13 End Sub 14
簡例 2 試寫一個電腦出單選的選擇題程式, 必須等待操作者點選完畢, 按鈕才執行對答的動作 若答對顯示 答對了... ; 若答錯顯示 答錯了...
' FileName:rdioButton2.sln 03 Private Sub btnok_click(byval. ) Handles btnok.click 04 lblshow.text = "" 05 If RadioButton3.Checked = True Then 06 lblshow.text = " 答對了!..." 07 Else 08 lblshow.text = " 答錯了!..." 09 End If 10 ' 上面 If... Then...Else 可改用如下敘述 11 ' lblshow.text = IIf( RadioButton3.Checked = True, " 答對了...", " 答錯了...") 12 End Sub
馬上練習 (FileName:radioButton2Ex.sln) 延續上例, 修改為當點選按鈕控制項時, 將標籤控制項顯示的對答結果清除, 以免誤認已對答 待按按鈕控制項時, 才將對答結果顯示出來
二. 關於 CheckBox 核取方塊控制項 當同一群組的多個選項允許多選時就必須使用核取方塊控制項 每個核取方塊都允許勾選 未勾選 無法勾選 ( 呈灰底 ) 三種選擇 多個核取方塊彼此間不互斥, 不像選項按鈕只允許單選 當核取方塊被勾選呈狀時, 其 Checked 屬性値變為 True, 同群組的核取方塊其 Checked 屬性値仍維持原來不改變, 如此才能多選
核取方塊常用屬性和事件
程式設計技巧 1. 同群組中有多個核取方塊供選擇, 必須 Enabled =True 才能進行單選 多選 不選 2. 當一個核取方塊前面出現表示該核取方塊被勾選, 其 Checked =True 其他核取方塊的 Checked 值不變 3. 如何在程式中檢查 CheckBox1 核取方塊是否被勾選, 若被勾選時執行敘述區段 1; 未被勾選執行敘述區段 2:
4. 如何在程式中使用 IIf 選擇敘述檢查 CheckBox1 核取方塊是否被勾選? 若被勾選時傳回資料 1; 未被勾選傳回資料 2, 兩者傳回值都指定給 var1 變數, 寫法 : var1 = IIf (CheckBox1.Checked = True, 資料 1, 資料 2) 5. 如何將 CheckBox1 核取方塊控制項設為無法勾選, 寫法 : CheckBox1.Enabled = False
簡例 延續上一小節的簡例二使用核取方塊控制項製作一個可複選的選擇題, 勾選完畢必須按鈕才判斷是否答對
' FileName:checkBox1.sln 01 Public Class Form1 02 03 Private Sub btnok_click(byval ) Handles btnok.click 04 lblshow.text = "" 05 If (CheckBox1.Checked = True And _ CheckBox2.Checked = True And _ CheckBox4.Checked = True) Then 06 lblshow.text = " 答對了!..." 07 Else 08 lblshow.text = " 答錯了!..." 09 End If 10 End Sub 11 12 End Class
三. 關於 GroupBox 群組方塊控制項 群組方塊控制項它和表單都屬於容器 用來將同性質選項置於同一容器變成一個群組 群組方塊控制項必須先建立, 接著在該群組方塊內建立相關的控制項 使用群組方塊的好處可將同性質的控制項分門別類
群組方塊常用屬性和事件
輸出入介面設計
' Filename: hotgoods.sln 01 Public Class Form1 02 03 Private Sub btnok_click(byval sender. ) Handles btnok.click 04 Dim price As Integer 05 If (rdbflyer.checked = True) Then 06 price = 27000 07 ElseIf (rdbdesire.checked = True) Then 08 price = 15000 09 ElseIf (rdbiphone4.checked = True) Then 10 price = 22000 11 Else 12 price = 16000 13 End If 14 lblsum.text = " 金額 : " & Str(price) & " 元 " 15 End Sub 16 17 End Class
輸出入介面設計
' Filename: hotgoods2.sln 01 Public Class Form1 02 03 Private Sub btnok_click(byval sender. ) Handles btnok.click 04 Dim sum As Integer = 0 05 If (chkhtcglv.checked = True) Then 06 sum += 690 07 End If 08 If (chkhtcbat.checked = True) Then 09 sum += 1290 10 End If 11 sum += IIf(chkAplUSB.Checked = True, 690, 0) 12 sum += IIf(chkAplBat.Checked = True, 1090, 0) 13 lblsum.text = " 金額 : " & Str(sum) & " 元 " 14 End Sub 15 16 End Class
輸出入介面設計
' Filename: hotgoods3.sln 01 Public Class Form1 02 03 Private Sub btnok_click(byval ) Handles btnok.click 04 Dim sum As Integer = 0 05 Dim price As Integer 06 If (rdbflyer.checked = True) Then 07 price = 27000 08 ElseIf (rdbdesire.checked = True) Then 09 price = 15000 10 ElseIf (rdbiphone4.checked = True) Then 11 price = 22000 12 Else 13 price = 16000 14 End If 15 sum = price 16
17 If (chkhtcglv.checked = True) Then 18 sum += 690 19 End If 20 If (chkhtcbat.checked = True) Then 21 sum += 1290 22 End If 23 sum += IIf(chkAplUSB.Checked = True, 690, 0) 24 25 sum += IIf(chkAplBat.Checked = True, 1090, 0) 26 lblsum.text = " 合計金額 : " & Str(sum) & " 元 " 27 End Sub 28 29 End Class
5-3 課堂練習