本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載 第四章 輸入介面設計 本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載
4-1 TextBox文字方塊 一、TextBox控制項常用的屬性
【注意】 活用MultiLine、WordWrap 和 ScrollBars 屬性 【注意】 活用MultiLine、WordWrap 和 ScrollBars 屬性 MultiLine=False,使得超出文字方塊寬度的 資料無法顯示。 MultiLine=True,可調整文字方塊的上下高度 來顯示多行文字。 MultiLine=True 且 WordWrap=True時,超過 文字方塊控制項寬度的資料自動移到下一行繼續 顯示。 MultiLine=True 且WordWrap=False時,則 需要進一步設定ScrollBars屬性,使其出現垂直 或水平捲動軸,才能操控範圍。
二、字串與數值的轉換函式 文字方塊 Text 屬性的資料是屬字串資料型別。 欲將 Text 屬性中的資料取出作數值運算 加法時,將 + 加 號視為字串合併運算,發生錯誤。 減法、乘法、除法,取出的 Text 屬性值會自動 轉成數值,不發生錯誤。 建議 Text 屬性的資料做四則運算 先做字串轉數值後再做運算,以免發生錯誤。 VB 提供 Val() 函式將字串轉成數值。語法: Val(str) 若 Text 屬性值的資料含有數字和文字 Val() 函式 只將前面是數字部份轉換成數值
【例】 Val ("123") →123 Val ("45ABC") →45 Val ("XY4.0") →0 【例】若TextBox1.Text= “22 ”和TextBox2.Text=“11” TextBox3.Text = TextBox1.Text + TextBox2.Text 結果:2211 TextBox3.Text = Val(TextBox1.Text) + Val(TextBox2.Text) 結果:33 TextBox3.Text = TextBox1.Text – TextBox2.Text 結果:11 TextBox3.Text = Val(TextBox1.Text) - Val(TextBox2.Text) 結果:11
TextBox3.Text = TextBox1.Text * TextBox2.Text 結果:242 TextBox3.Text = Val(TextBox1.Text) * Val(TextBox2.Text) 結果:242 TextBox3.Text = TextBox1.Text / TextBox2.Text 結果:2 TextBox3.Text = Val(TextBox1.Text) / Val(TextBox2.Text) 結果:2
三、TextBox控制項常用的方法 1. Clear()方法 TextBox1.Clear( ) 或 TextBox1.Text = ""
三、TextBox 控制項常用的方法 表單和控制項除具有屬性外還有能執行的一些特定功能,稱為「方法」。 方法只能在程式執行階段才能呼叫使用。 1. Clear()方法 將文字方塊的顯示內容清成空白。 如將 TextBox1 文字方塊內顯示的文字清除 寫法: TextBox1.Clear( ) 或 TextBox1.Text = ""
2. Focus()方法 設定控制項為駐停焦點,也就是成為作用物件。 如將TextBox1 文字方塊設為目前駐停焦點,寫法: TextBox1.Focus( ) 一個控制項擁有TabIndex、TabStop屬性,就可 設為駐停焦點。 在程式中透過Focus()方法來指定某一控制項,成為 表單目前的駐停焦點。 在程式執行間,不須使用者按 鍵,可直接指定 某控制項成為作用物件。
表單中若有多個控制項 第一個建立的控制項 TabIndex 屬性值為 0 第二個為1,依此類推。 被指定駐停焦點控制項的 Visible 與 Enabled 屬性值皆設為「True」,此方法才有效。
' FileName : us2nt.sln 01 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 02 lblRate.Text = "32.5" 03 lblNT.Text = "" 04 txtUs.TabIndex = 0 05 End Sub 06 ' --------------------------------------------------------------------------------- 07 Private Sub btnChange_Click(ByVal sender As System. Object, ByVal e As System.EventArgs) Handles btnChange. Click 08 lblNT.Text = Val(lblRate.Text) * Val(txtUs.Text) 09 End Sub 10 ' ----------------------------------------------------------------------------------
11 Private Sub btnCls_Click(ByVal sender As System 11 Private Sub btnCls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCls.Click 12 lblNT.Text = "" 13 txtUs.Clear() 14 txtUs.Focus() 15 End Sub
四、TextBox 控制項的 TextChanged事件 程式執行階段,當文字方塊的 Text 屬性內 的資料有異動時,馬上觸動該文字方塊的TextChanged事件。 若希望文字方塊有異動,表單上相關控制項的資料馬上跟著文字方塊的內容異動 可免去按鈕才知道結果。
FileName : circle.sln 01 Private Sub Form1_Load(ByVal sender …..) Handles MyBase.Load 02 lblArea.Text = "" 03 txtPassword.MaxLength = 3 04 txtPassword.PasswordChar = "?" 05 txtPassword.TabIndex = 0 06 txtR.ReadOnly = True 07 End Sub 08 ' --------------------------------------------------------------------------------------------- 09 Private Sub btnCheck_Click(ByVal …..) Handles btnCheck.Click 10 If txtPassword.Text = "abc" Then 11 txtR.ReadOnly = False 12 txtR.Focus() 13 End If 14 End Sub 15 ' -------------------------------------------------------------------------------------------- 16 Private Sub txtR_TextChanged(ByVal …..) Handles txtR.TextChanged 17 lblArea.Text = 3.14 * Val(txtR.Text) ^ 2 18 End Sub
4-2 格式化輸出 一、Space函式 Space函式可以在目前游標處插入指定數目的空白字串,在程式中可利用該函式調整文字位置使其上下對齊。語法如下: 【例】在TextBox1文字方塊控制項上面顯示品名 (iPhone)和單價,品名和單價之間加上兩個 空白字元。 TextBox1.Text = "iPhone:" & Space(2) & "9000元"
4-2 格式化輸出 一、Space函式 [例] TextBox1.Text = "iPhone:" & Space(2) & "9000元" 使用時機 想讓資料在表單上排列整齊,需用 格式化函式才能對輸出資料格式化。 一、Space函式 可在目前游標處插入指定數目空白字串 在程式中可調整文字位置使其上下對齊。 語法: Space(n) [例] TextBox1.Text = "iPhone:" & Space(2) & "9000元"
二、vbNewLine、vbCrLf、vbTab常數 Chr函式可將數值轉成對應的ASCII 碼字元。 如Chr(65)的值為 "A"。 Chr(9)字元就相當於鍵盤的 鍵,其後文字 跳到下一個定位點位置。 定位點和定位點間可容納8個字元,如果字串 長度超過就會多佔一個定位點。 文字如要換行要 用Chr(13) + Chr(10) 兩個字元 組成換行符號。
系統定義vbNewLine和vbCrLf常數來表示 Chr(13) + Chr(10)換行符號。 【例】 TextBox1.Text=“== 單價表 ==” & vbCrLf & “iPhone4” & vbTab & “9000元” 會顯示成:( 代表控白字元) == 單價表 == iPhone49000元
三、Format函式 Format函式可將輸出資料以指定格式輸出, 使得輸出資料能對齊以方便閱讀。 運算式可為數值或字串運算式。 fmt參數若省略時,會將數值轉換成字串, 並將正數前的空白去除。
數字的預設格式如下表:
常用Format函式的數字自訂格式如下表:
常用Format 函式的時間格式: Now() 函式用來取得目前日期與時間。 顯示結果會因「控制台」中「地區及語言」 格式設定不同而不同。 本書採的日期及時間的格式如下: (以2010年3月21日上年9點20分48秒為例) 簡短日期 → 2010/03/21 完整日期 → 2010年3月21日 簡短時間 → 上午09:20 完整時間 → 上午:09:20:48
常用Format函式的日期與時間自訂格式字元如下表:
【例】設日期為#3/17/2010 5:21:50 PM#,然後使用各種Format函式格式,來觀察執行結果。 Dim day As Date = #3/17/2010 5:21:50 PM# txtShow.Text = Format(day, "h:m:s") 值為"5:21:50" txtShow.Text = Format(day, "hh:mm:ss tt") 值為"05:21:50 下午" txtShow.Text = Format(day, "HH:mm:ss") 值為"17:21:50" txtShow.Text = Format(day, "yyyy MMM d,dddd") 值為"2010 三月17,星期三" txtShow.Text = Format(day, "MM/d/yy") 值為"03/17/10" txtShow.Text = Format(day, "yy-MMMM-d") 值為"10-三月-17" txtShow.Text = Format(day, "M/d/yyyy HH:mm") 值為"3/17/2010 17:21"
【上機】
' FileName : member.sln 01 Private Sub Form1_Load(ByVal …. ) Handles MyBase.Load 02 txtData.TabStop = False 03 txtData.Text = Space(6) & "VB俱樂部會員名冊" & Space(4) & Format(Now(), "M-d-yyyy h:m:s") & vbCrLf & vbCrLf 04 txtData.Text &= "姓名" & vbTab & "電話" & vbTab & vbTab & "生日" & vbTab & vbTab & "消費金額" & vbCrLf 05 txtData.Text &= "------" & vbTab & "------" & vbTab & vbTab & "------" & vbTab & vbTab & "------------" & vbCrLf 06 txtData.Text &= "楚留香" & vbTab & "(02)12345678" & vbTab & _ Format(#3/17/1982#, "d") & vbTab & Format(78260.5, "$000000.0") & vbCrLf 07 txtData.Text &= "張無忌" & vbTab & "(02)87654321" & vbTab & _ Format(#11/6/1980#, "d") & vbTab & Format(129510, "$000000.0") 08 End Sub
4-3 InputBox函式 InputBox函式會顯示輸入對話方塊,使用者只要 在文字方塊內輸入資料,再按 <[確定> 鈕,且所 輸入資料會以字串型別放入指定的字串變數。 語法:
InputBox 函式的引數說明: 1. 字串變數 呼叫 InputBox 函式時會出現一個對話方塊, 輸入文字後 按 <[確定> 鈕,文字會傳給等號左邊的字串變數。 按 <取消> 鈕,傳回值是空字串("")。 2. 提示訊息引數 用來提醒使用者輸入資料的內容或格式, 本引數不可省略。若沒有提示訊息必須 "“ 加入表示。
3. [ ] 引數 中括號內引數可省略,但引數間的逗號需保留。 4. 標題引數 為對話方塊標題文字,屬選擇性引數,如省略 以專案名稱當做標題文字。 5. 預設值引數 呼叫 InputBox 函式時,文字方塊中預設的文字 資料。 6. Xpos,Ypos引數 設定對話方塊在螢幕的座標,單位為Pixel (像素)。 若省略此引數,對話方塊預設在螢幕中央偏上方 1/3處。
' FileName : welcome.sln 01 Private Sub Form1_Load(ByVal … ) Handles MyBase.Load 02 Dim user As String 03 user = InputBox("請輸入姓名:", "姓名") 04 lblWelcome.Text = "歡迎" & user & "使用本軟體!" 05 End Sub
4-4 MsgBox 函式與 MsgBox 敘述 MsgBox函式與MsgBox敘述用法一樣。
一、MsgBox函式的語法 當呼叫 MsgBox 函式時會出現指定的指令 按鈕,使用者只要按下按鈕後,該鈕 代碼會存入傳回值中。
二、MsgBox 函式的格式碼
「警示圖示代碼」的相關內容如下表:
其他代碼如下表:
1. MsgBox("是否結束程式?", 4, "結束") 2. MsgBox("是否結束程式?", MsgBoxStyle.YesNo, "結束")
1. MsgBox("是否結束程式?", 52, "結束") ' 4 + 48=52 2. MsgBox("是否結束程式?", MsgBoxStyle.YesNo Or _ MsgBoxStyle.Exclamation, "結束") 3. MsgBox("是否結束程式?", MsgBoxStyle.YesNo + _
三、MsgBox函式的傳回值
【例】以訊息方塊詢問是否結束程式,若使用者按 [是] 鈕就結束程式,程式碼有兩種寫法: 另一種寫法:
【問題分析】 1. 使用InputBox函式詢問密碼。 2. 密碼錯誤時,用MsgBox敘述顯示錯誤訊息。 3. 華式溫度 = 9/5 x攝氏溫度+32。 【上機】 1. 專案名稱命名為『password』。 2. 在表單內,建立如下圖所示之控制項:
' FileName : password.sln 01 Private Sub Form1_Load(ByVal ….) Handles MyBase.Load 02 lblF.Text = "" 03 Dim password As String 04 password = InputBox("請輸入密碼:", "密碼") 05 If password <> "123" Then 06 MsgBox("密碼錯誤!程式將結束!!", MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation, "錯誤") 07 End 08 End If 09 End Sub 10 ' ------------------------------------------------------------------------------- 11 Private Sub txtC_TextChanged(ByVal ….) Handles txtC.TextChanged 12 Dim c As Single 13 Dim f As Single 14 c = Val(txtC.Text) 15 f = c * 9 / 5 + 32 16 lblF.Text = Format(f, "###.00") 17 End Sub