第五章: 輸入與輸出
章節預覽 實作 理論 5.1 標籤(Label)輸出控制項 5.2 文字方塊(Text Box)輸入控制項 5.3 字串與數值轉換函數 5.5 標籤與文字方塊程式設計 5.6 InputBox函數 5.7 MsgBox函數與MsgBox敘述 5.8 由印表機輸出資料 5.9 本章整合應用實例 理論 5.4 再談物件與變數命名
5.1:標籤(Label)輸出控制項 標籤控制項 主要功能是用來輸出文字。 可設定輸出文字的字型以及對齊方式。 標籤 控制項
5.1:標籤(Label)輸出控制項 建立標籤(Label)控制項 3:透過標籤的屬性視窗,設定各項屬性值 1:選取 標籤工具 2:在表單適當位置拉出標籤控制項
5.1:標籤(Label)輸出控制項 標籤的屬性 屬性功能 屬性值 屬性預設值 Alignment (對齊方式) 標題文字(Caption)對齊方式: 0-靠左對齊 1-靠右靠齊 2-靠中對齊 0-靠左對齊 AutoSize (自動調整) 屬性值為True或Flase。設定是否自動調整標籤水平寬度,以便顯示完整的標籤內容。 True BorderStyle (邊框) 標籤的框線樣式: 0-沒有框線 1-單線固定 0-沒有框線 Caption (標題文字) 預設屬性 標籤的標題文字,也就是要顯示的資料。當程式設計階段或程式執行階段,若更動該屬性值,則標籤將改變顯示內容。 Label1 (同標籤名稱) WordWarp (自動換列) 屬性值為True或Flase。若將本屬性與AutoSize屬性同時設為True,則標籤內容可以做直向擴展,當連續文字超過標籤寬度時會增加寬度,當出現空白時,則會將標籤內容以多個橫向列顯示。 False
3:透過文字方塊的屬性 視窗,設定各項屬性值 2:出現了文字方塊控制項 (您可以拖曳改變位置與大小) 5.2:文字方塊(Text Box)輸入控制項 希望由使用者輸入某些資料時,可以藉由Visual Basic所提供的各項具有輸入特性的物件來完成。 例如文字方塊(Text Box)控制項。 建立文字方塊控制項。 3:透過文字方塊的屬性 視窗,設定各項屬性值 1:按兩下 2:出現了文字方塊控制項 (您可以拖曳改變位置與大小)
5.2:文字方塊(Text Box)輸入控制項 文字方塊的常用屬性 屬性功能 屬性值 屬性預設值 Locked (鎖定內容) 設定是否允許修改文字方塊的內容: True:不能修改,只能選取文字。 False:允許修改文字。 False MaxLength (本文長度) 設定文字方塊內最多可以輸入的字元數目。設定為「0」代表長度不限制。 MultiLine (多列) 文字資料超過設定的寬度時,是否採多列或單列顯示資料,屬性值如下: True:允許多行顯示 False:不允許多行顯示 PasswordChar(密碼) 輸入的字元將顯示為其他符號(例如:『*』)。 非密碼效果 Text (文字) (預設屬性) 輸入的文字會以字串方式存入Text屬性,若程式設計或執行階段更改該屬性內容,則文字方塊內容亦會跟著變動。 Text1 (同物件名稱)
5.3:字串與數值轉換函數 程式設計有時必須將字串型態的資料轉為數值資料,以便於作數學運算,有時則恰恰相反,希望將數值資料轉換為字串,以便於作字串連接、尋找子字串等運算。 轉換最常見到的是文字方塊的Text屬性 由於Text屬性是用來儲存文字方塊的內容文字,因此是字串資料型態,若希望使用者輸入某些數值,就需要將使用者在文字方塊欄位中輸入的數值(其實是字串資料型態)轉換為數值資料型態。 字串轉數值可以使用Val函數,Str函數則是將數值轉換為字串資料型態。 Val(Str1):將字串Str1前面的數字部份轉換為數值資料。 Str(Num1):將數值Num1轉換為字串。
5.3:字串與數值轉換函數 【範例】: 【範例5-1】 Val(Str1)與Str(Num1)函數練習。 敘述 回傳值 說明 100 將字串『100』全部轉換成數值100。 Val("50Well20") 45 只會將前面的數字部分轉換為數值50。 Val("Play500") 由於字串的第一個字元非數字,因此傳回數值0。 Str(100) "△100" 將數值100轉換成字串"△100",其中△代表空白字元。 Str(-45) "-45" 將數值-45轉換成字串"-45"。
5.4:再談物件與變數命名 物件與變數的命名也是一門學問,尤其是在開發中大型專案時尤其重要。 Visual Basic的版本不斷更新,提供的物件種類也越來越多,因此物件的『保留字』也愈來愈多。 Visual Basic除了傳統BASIC的保留字之外,提供了非常多的控制項,使程式設計師縮短了輸出入介面設計的時間,但也使得物件種類遽增。 為了提高程式的可讀性及方便維護,物件與變數的命名技巧及相關要注意的事項,在此特別提出說明。 命名原則 保留字 物件的命名技巧 控制項的預設屬性 變數與符號常數的命名技巧
5.4:再談物件與變數命名 命名原則 物件名稱的命名只能使用英文字母、數字與底線等字元(且第一個字需為英文字母)。變數名稱雖然可以使用中文,但建議不要使用中文。 物件或變數名稱最好容易記憶且具可讀性。 重要的變數名稱最好加上註解,在完整的中大型專案開發中,甚至需要記錄在分析書或規格書中。 區域變數名稱盡量以二至八個英文字母為原則,最好是英文單字或英文單字的縮寫,例如:quantity、area 、length、pw(password縮寫)、qty(quantity縮寫)等等。 也可使用複合字來表示,每個字中間可以使用底線加以分隔,或者善用大小寫,例如:month_qty、mon_qty、MonthQty。 全域變數名稱儘量使用完整單字表示。 不可使用Visual Basic的保留字或關鍵字。
5.4:再談物件與變數命名 保留字 每一種程式語言都會定義某些『特殊用字』,這些特殊用字對於該程式語言的編譯器或直譯器而言是有意義的,稱之為『保留字』。因此不能把這些保留字當做變數、物件或函數名稱。 Visual Basic的『保留字』很多。在程式碼編輯視窗編輯程式時,若遇Visual Basic『保留字』則會出現下列特性: 若程式碼中出現藍色字體的單字就是『保留字』,這些字不可做為物件或變數名稱。 編輯程式時若使用小寫字母來撰寫,則IDE會自動將Visual Basic的特殊用字的第一個字母轉換為大寫字母,這當中某些特殊字即為保留字(藍色字體),例如:Print、End等等。至於其他非藍色字體的特殊字(例如Math)則由於系統另有用途,因此最好也不要使用這些名稱做為物件或變數的名稱。
5.4:再談物件與變數命名 物件的命名技巧 Visual Basic的工具箱提供了眾多物件,為了提高程式的可讀性,可以利用一些命名規則的技巧使得該物件名稱不但容易記憶且容易理解用途。 Visual Basic表單及控制項命名要點: 必須使用英文字母為開頭,且物件名稱必須使用英文字母、數字或『_』組成,不可使用空白字元與標點符號。 物件名稱的長度不超過40個字元。 Visual Basic表單及控制項命名技巧(僅供建議): 將物件名稱分為3部分。 第一部份為物件用途的縮寫:例如表單(frm)、標籤(lbl)、文字方塊(txt)、指令按鈕(cmd)等。 第二部份與第三部份為該物件所代表之資料的縮寫複合字:例如某標籤可能代表使用者名稱,則為UserName。請將複合字的第一個字母使用大寫突顯區隔。 【範例】:lblUserName。
5.4:再談物件與變數命名 控制項的預設屬性 多數的Visual Basic控制項都包含一個特殊的屬性,稱為『預設屬性』。 預設屬性的用途就是當您所撰寫的程式若只註明了某個控制項物件,而未指定使用哪一個屬性時,則Visual Basic會將之認定為使用預設屬性。 例如:標籤控制項名稱為lblUserName, 若您設定lblUserName="Hello Kitty",則相當於設定標籤控制項的Caption屬性, 即『lblUserName.Caption="Hello Kitty"』。 若不知道哪一個屬性是預設屬性,請不用隨便省略物件名稱後面的屬性名稱,以免發生非預期狀況。 物件 物件名稱 字首 預設屬性 表單 Form frm 無 標籤 Label lbl Caption 指令按鈕 Command cmd Value 文字方塊 Text Box txt Text
5.4:再談物件與變數命名 變數與符號常數的命名技巧 變數名稱命名技巧 變數命名技巧與控制項命名技巧類似,差別只在於沒有代表控制項的縮寫字元。例如:pw縮寫、UserName複合字等都可以當做變數名稱。 符號常數命名技巧 符號常數使用CONST宣告,並且可以用來代表程式中常常出現的常數值,例如:CONST PI=3.14159。一般來說,我們會將符號常數使用大寫字母來加以命名,以突顯符號常數。 使用符號常數對於程式的維護而言有極大的幫助,例如:希望檢測所有的字串長度不可超過50,此時就可以宣告一個符號常數MAXLENGTH來取代程式中所有需要檢查字串長度的『50』。如此一來,當放寬或縮小長度限制時,只要更改MAXLENGTH的宣告值即可,而不必大費周章的改變所有的『50』。
5.5:標籤與文字方塊程式設計 【實作範例5-2】: 透過文字方塊做為輸入與輸出的介面,並且使用標籤做為畫面各欄位的輔助說明。其執行結果如下,使用者可以輸入購票數量,按下【計算】鈕之後,經由程式計算,將計算結果顯示於總價文字方塊欄位中。
【實作範例5-2】 上機實作 Step1:將專案名稱設為『p5_02』。
【實作範例5-3】 輸入數量 自動計算總價 【實作範例5-3】: 使用文字方塊的change事件來改寫範例5-2,使得使用者不必按下【計算】鈕就可以即時獲得計算結果。其執行結果如下,使用者可以輸入購票數量,經由程式計算,立即將計算結果顯示出來。 輸入數量 自動計算總價
【實作範例5-3】 上機實作 Step1:將專案名稱設為『p5_03』。 Step5:執行程式。會發現每當txtQty欄位值被改變時,就會即時計算出總價。
5.6:InputBox函數 InputBox函數語法如下: 【語法說明】: 當程式呼叫InputBox函數時,會出現一個對話方塊,使用者可以在對話方塊中使用鍵盤輸入資料,而該資料將會被指定為等號左邊的字串變數值(亦即InputBox函數的回傳值)。 提示訊息:對話方塊的內容,可用來提示使用者應該輸入哪些資料。 標題:對話方塊的標題文字。 預設值:預設值會出現在輸入欄位中,若使用者並無輸入任何資料時,預設值則為函數的回傳值。 Xpos,Ypos:指定對話方塊的位置距離,其值為對話方塊距螢幕左上角的相對座標,單位為Twip。省略此參數時,對話方塊將被放置於螢幕中央偏上約1/3的地方。 語法:InputBox(提示訊息[,[標題][,[預設值][,Xpos,Ypos]]]) 功能:函數執行後將會出現一個對話方塊,並且允許使用者輸入資料。
5.6:InputBox函數 【範例】: CardNo = InputBox("請輸入您的卡號:", "信用卡查詢", "0100", 1000, 3000),將會出現下圖的對話方塊。若使用者修改或輸入資料後,並按【確定】鈕後,CardNo的變數值將是使用者輸入的字串,若使用者按下【取消】鈕後,則CardNo的變數值將會是空字串("")。
5.6:InputBox函數 【實作範例5-4】: 本範例會計算兩點平面座標之距離,並使用InputBox函數讀取使用者的輸入值,然後將輸入之資料按照公式計算後回傳給使用者。
【實作範例5-4】 上機實作 Step1:將專案名稱設為『p5_04』。 Step2:在表單上建立2個指令按鈕,設定各物件屬性。
5.7:MsgBox函數與MsgBox敘述 在操作Windows時,有時候會突然出現一個錯誤或警告訊息,例如:列印文件但卻未開啟印表機時,就會出現下圖之對話方塊。 上圖之對話方塊可以用來輸出某些文字提示使用者目前所遭遇的狀況,並且可以藉由使用者按下不同的按鈕決定後續程式所要採取的工作。例如按下【重試】鈕與按下【取消】鈕之後,程式將可以採用不同的對應策略。 在Visual Basic中,可以透過MsgBox函數或MsgBox敘述來製作類似功能的對話方塊。MsgBx函數與MsgBox敘述的效果類似 MsgBox敘述並不會傳回任何數值,因此無法判斷使用者按下了哪一個按鈕。 MsgBox函數則可以藉由回傳值,了解使用者按下了哪一個按鈕,以便做出適當的回應。
5.7:MsgBox函數與MsgBox敘述 MsgBox函數語法如下: 語法:MsgBox(提示訊息[,[格式碼][,標題]]) 【語法說明】: 提示訊息:對話方塊的內容,可用來提示或警告使用者目前所遭遇的狀況。 標題:對話方塊的標題文字。 格式碼:對話方塊內的按鈕與圖示種類,其代碼如下表: 表中的格式碼具有累加性質,例如:若希望顯示【是】、【否】兩個按鈕,並且圖示為 ,則可以將格式碼設定為36(即32+4)。但屬於同一性質格式碼是不允許做累加組合的,例如:16、32、48、64不允許同時做累加組合。 語法:MsgBox(提示訊息[,[格式碼][,標題]]) 功能:函數執行後將會出現一個對話方塊,並提供多種按鈕格式,當使用者按下不同的按鈕,將會產生不同的回傳值。
5.7:MsgBox函數與MsgBox敘述 格式碼 說明 Windows英文版 Windows中文版 只顯示 【Ok 】 按鈕 只顯示 【Ok 】 按鈕 只顯示【確定】 按鈕 1 顯示 【Ok】、【Cancel】 兩個按鈕 顯示【確定】【取消】兩個按鈕 2 顯示【Abort】、【Retry】、 【Ignore】三個按鈕 顯示【異常終止(A) 】、【重試(R)】、【略過(I)】 三個按鈕 3 顯示【 Yes 】、【No】、 【 Cancel 】 三個按鈕 顯示【是(Y) 】、【否(N)】、 【取消】三個按鈕 4 顯示【Yes】、【 No 】兩個按鈕 顯示【是(Y) 】、【否(N)】兩個按鈕 5 顯示【Retry】、【 Cancel 】兩個按鈕 顯示【重試(R) 】、【取消】 兩個按鈕 設定第一個按鈕為預設按鈕。(焦點停置處) 256 設定第二個按鈕為預設按鈕。(焦點停置處) 512 設定第三個按鈕為預設按鈕。(焦點停置處) 16 圖示 32 48 64
5.7:MsgBox函數與MsgBox敘述 【語法說明】: 回傳值:當使用者按下不同按鈕時,將會產生不同的回傳值如下表: 傳回值 說明 Windows英文版 Windows中文版 1 按【Ok 】 鈕 按 【確定】鈕 2 按【Cancel】 鈕 按 【取消】鈕 3 按【Abort 】 鈕 按【異常終止(A)】鈕 4 按【Retry】鈕 按【重試(R)】鈕 5 按【Ignore】鈕 按【略過(I) 】鈕 6 按【Yes】鈕 按【是(Y)】鈕 7 按【No】 鈕 按【否(N)】鈕
5.7:MsgBox函數與MsgBox敘述 MsgBox敘述語法如下: 按下【是】鈕,則結束程式 【語法說明】: 【實作範例5-5】: 本範例為範例5-4的修正版,增加按下【結束】鈕之後,詢問使用者是否要結束程式(如下圖),若按下【是】鈕,則結束程式。 語法:MsgBox提示訊息[,[格式碼][,標題]] 功能:MsgBox敘述執行後將會出現一個對話方塊,並提供多種按鈕格式。 按下【是】鈕,則結束程式
【實作範例5-5】 上機實作 Step1:將專案名稱修改為『p5_05』。 Step2:在表單上修改表單物件Caption屬性為『f5_05 (計算距離)』。 Step3:編輯程式碼。 Step4:執行程式。
5.8:由印表機輸出資料 除了將資料輸出到螢幕之外,也可以將資料指定由印表機印出,一般由印表機表機輸出資料有兩種方式: 直接由印表機列印資料 方法一:直接將資料由印表機列印出來。 方法二:先把資料輸出到『表單』或『表單上面的控制項』當中,然後再由印表機將整個表單畫面列印出來。 直接由印表機列印資料 如果要透過Visual Basic敘述將資料直接由印表機印出,必須透過印表機物件來完成,印表機物件名稱則為『Printer』,它提供了許多的字型屬性與控制列印效果的方法如下表: 方法 作用 語法 Print 列印 Printer.Print資料 NewPage 跳頁 Printer.NewPage EndDoc 結束列印 Printer.EndDoc
5.8:由印表機輸出資料 在物件導向程式設計中,所謂物件的『方法』代表可以用來完成某一項特殊功能的處理程序,例如:執行Printer.NewPage方法,列表機就會自動跳頁。 屬 性 說 明 FontName (字體名稱) 列印資料所採用的字體種類 FontBold (粗體) 列印資料時,字體是否加粗。 True-加粗 False-正常 FontItalic (斜體) 列印資料時,字體是否為斜體。 True-斜體 False-正常。 FontSize (字形大小) 列印資料所採用的字體大小 FontUnderline (加底線) 列印資料時,字體是否加底線。 True-加底線 False-正常 Page 目前列印的頁碼
【實作範例5-6】 程式設計真簡單 【實作範例5-6】: 由印表機列依照字體與字型印出下列資料。 上機實作 Step1:將專案名稱設為『p5_06』。 Step2:編輯程式碼。 Step3:開啟印表機,然後執行程式。 程式設計真簡單
【實作範例5-7】 【實作範例5-7】: 列印含有頁碼的資料,並且控制印表機的換頁動作。列印結果如下: 上機實作 Step1:將專案名稱設為『p5_07』。 Step2:編輯程式碼。 Step3:開啟印表機,然後執行程式。
5.8:由印表機輸出資料 列印表單 每一個表單物件都有一個『PrintForm』方法,透過此方法可以把螢幕上的表單內容完整地由印表機列印出來,其語法如下: 【語法說明】: 若省略表單名稱,則只會列印目前使用表單的畫面內容。 表單視窗邊框及標題不會被列印出來。 使用PrintForm方法,將表單列印完畢,並不需要使用Printer.EndDoc敘述來結束列印動作。 語法:[表單名稱.]PrintForm 功能:列印表單。
【實作範例5-8】 列印表單 【實作範例5-8】: 列印表單內容(不含邊框及標題)。 上機實作 Step1:專案名稱為『p5_08』。
5.9:本章整合應用實例 【實作範例5-9】: 上機實作 撰寫一個計算台制、公制、英制面積的轉換工具,並且提供【列印】鈕,讓使用者可以將轉換結果列印出來。 上機實作 Step1:專案名稱為『p5_09』。 Step2:在表單上產生下列控制項並設定屬性。
【實作範例5-9】 Step3:編輯下列程式碼。 Step4:開啟印表機,然後執行程式。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 '*************************************** '******** f5_09.frm(面積轉換) ******** '*************************************** Private Sub cmdPrint_Click() PrintForm cmdPrint.Visible = False End Sub Private Sub Form_Load() cmdPrint.Visible = False End Sub Private Sub txtTWArea_Change() lblStdArea.Caption = Val(txtTWArea.Text) * 3.306 lblUSArea.Caption = Val(txtTWArea.Text) * 3.95 cmdPrint.Visible = True End Sub
【實作範例5-9】
5.9:本章整合應用實例 【範例5-10】: 使用格式化函數(例如Format函數)來編排列印效果之資料對齊。
5.10:本章回顧 實作 理論 標籤(Label)輸出控制項 文字方塊(Text Box)輸入控制項 字串與數值轉換函數 標籤與文字方塊程式設計 InputBox函數 MsgBox函數與MsgBox敘述 由印表機輸出資料 本章整合應用實例 理論 物件與變數的命名
本章習題