點選按鈕執行操作
使用用戶與應用程式互動的最簡單的方法是給用戶一個按鈕。可以用VisualBasic提供的CommandButton控件,或利用包含圖形的Image控件,如一個圖標,來建立自己的「按鈕」。
使用CommandButton
大多數VisualBasic應用程式都有CommandButton,使用戶透過簡單的敲擊按鈕來執行操作。當使用者選取按鈕時,不僅會執行對應操作,還會使該按鈕看起來像被按下並釋放一樣。無論何時,只要使用者點擊按鈕,就會呼叫Click事件過程。將程式碼寫入Click事件過程,執行想要執行的動作。
在程式執行時,有多種方法可以選取CommandButton:
用滑鼠點選按鈕。
按TAB鍵把焦點移到對應按鈕上,然後按SPACE鍵或ENTER鍵選取該按鈕。請參閱本章後面的「焦點概述」。
按下CommandButton的快速鍵(ALT 底線的字元)。
在程式碼中設CommandButton的Value屬性為True。 cmdClose.Value=True
在程式碼中呼叫CommandButton的Click事件。 cmdClose_Click
如果該CommandButton是窗體的缺省命令按鈕,既使將焦點移到其它不是CommandButton的控制項上,按下回車鍵也會選取該按鈕。設計時,透過設定某按鈕的Default屬性為True,指定它為表單的預設CommandButton。
如果該CommandButton是窗體的缺省的取消按鈕,即使把焦點移到其它控制項上,也能透過按ESC鍵選取該按鈕。在設計時,透過設定某按鈕的Cancel屬性為True,指定它為表單的預設的取消按鈕。所有這些操作都使VisualBasic呼叫Click事件過程。
“測試按鈕”應用程式
利用Caption屬性可以在按鈕上顯示文字,告訴使用者按鈕的功能。在圖3.4中,在控制項範例應用程式的測試按鈕範例中包含一個Caption屬性為ChangeSignal的CommandButton(此範例的工作為Controls.vbp範例應用程式中的Buttons.frm)。
注意,S是這個按鈕的快速鍵,用一條底線表示。在Caption屬性的正文內插入(&)符號,將使得此符號後面的字元成為該按鈕的快速鍵(例如,Change&Signal)。
使用者點擊CommandButton,將執行該CommandButton的Click事件過程中的程式碼。在這個範例中,每次點擊按鈕,將變換一個不同的交通燈圖示。
詳細資訊關於CommandButton的屬性的詳細信息,請參閱第七章「使用VisualBasic的標準控制項」。
用於顯示和輸入文字的控件
Label和TextBox控制項是用來顯示和輸入文字的。讓應用程式在窗體中顯示文字時使用Label,允許使用者輸入文字時使用TextBox。 Labels中的文本為唯讀文本,而TextBox中的文本為可編輯文本。
可由使用者編輯的文本,例如一個順序條目TextBox
欄位或一個密碼框
只能顯示的文本,例如在窗體中標識一個Label
欄位或給使用者顯示指令
Labels和TextBoxes將在以下部分討論:
用Label顯示文字(vbconUsingLabels)使用Label控制項的基本知識。
使用TextBox(vbconWorkingWithTextBox)使用TextBox的基本知識。
用Label顯示文本
Label控制項顯示的文字使用者不能直接修改。如TextBox和ScrollBar這些沒有自己的Caption屬性的控件,可以用Label來識別。在Label中實際顯示的文字是由Caption屬性控制的,該屬性可以在設計時在「屬性」視窗中設定或在運行時用程式碼賦值。
在預設情況下,標題是Label控制項中唯一的可見部分。但是,如果把BorderStyle屬性設為1(可以在設計時進行),那麼Label就有了一個邊框,看起來像一個TextBox。也可以透過設定Label的BackColor、BackStyle、ForeColor和Font屬性來,改變Label的外觀。
改變Label尺寸以適應其內容
設計時可在「屬性」視窗中指定單行Label的標題。但是如果要輸入一個較長的或在運行時可能變化的標題,該怎麼辦呢?Label提供了兩種屬性:AutoSize和WordWrap,用於幫助您改變控制項尺寸以適合較長或較短的標題。
AutoSize屬性決定控制項是否會自動改變尺寸以適應其內容。如屬性設為True,Label就會根據其內容進行水平方向變化,如圖3.5所示。
WordWrap屬性使Label依其內容垂直方向變化,而保持其寬度不變,如圖3.6所示。本範例的工作版,請參閱應用程式範例Controls.vbp中的WordWrap.frm。
注意如果在Controls.vbp中運行AotoSize範例,就會發現為了同時使用WordWrap,必須將兩個複選框都選取。這是因為,要使Label的WordWrap屬性作用,就必須設定AutoSize為True。只有在一個單字的寬度超過控制項的目前寬度時,Label的寬度才會增加。
詳細資訊關於Label控制項屬性的詳細信息,請參閱第七章「使用VisualBasic的標準控制項」。
使用TextBoxes
TextBox是一種通用控件,可以由使用者輸入文字或顯示文字。除非把TextBox的Locked屬性設為True,否則無法用TextBox顯示不希望使用者更改的文字。
TextBox中顯示的實際文字是受Text屬性控制的。 Text屬性可以用三種方式設定:設計時在「屬性」視窗進行、執行時透過程式碼置或執行時由使用者輸入。透過讀取Text屬性能在執行時檢索TextBox的目前內容。
多行TextBox和WordWrap
TextBox在缺省情況下只顯示單行文本,且不顯示ScrollBar。如果文字長度超過可用空間,則只能顯示部分文字。透過設定MultiLine和ScrollBars兩種屬性(只能在設計程式時設定),可以改變TextBox的外觀和行為。
注意不要把ScrollBars屬性與ScrollBar控制項混淆,ScrollBar控制項並不屬於TextBox,它有自己的屬性集。
把MultiLine屬性設為True,可以讓TextBox在執行時接受或顯示多行文字。只要沒有水平方向ScrollBar,多行TextBox中的文字會自動依字換行。 ScrollBars屬性的預設值被設定為0(None)。自動按字換行省去用戶在行尾插入換行符的麻煩。當一行文字已超過所能顯示的長度時,TextBox會自動將文字折回下一行顯示。
在設計時,不能在「屬性」視窗輸入換行符。在過程中,可以透過插入一個回車加上換行符(ANSI字元13和0)來產生一個行斷點。也可以用常數vbCrLf插入一個回車與換行符號組合。例如,下面的事件過程是在載入窗體時,把兩行文字放入一個多行TextBox(Text1)中的範例。
SubForm_Load()
Text1.Text=Herearetwolines_
&vbCrLf&inatextbox
EndSub
使用TextBox中的文字
利用TextBox的SelStart、SelLength和SelText屬性,可以控制TextBox的插入點與選擇行為。這些屬性僅能在運行時使用。
當一個TextBox首次得到焦點時,TextBox缺省的插入點和遊標位置在文本的最左邊。使用者可以用鍵盤和滑鼠移動它們。當TextBox失去焦點而後再得到時,插入點位置與使用者最後設定的位置一樣。
在某些情況下,它可能與用戶設定不一致。如:在字處理應用程式中,使用者會希望新字元出現在已有文字後面;在資料項應用程式中,使用者會希望他的輸入取代原有條目。使用SelStart和SelLength屬性,使用者可以根據需要改變TextBox的行為。
SelStart屬性是一個數字,指示文字串內的插入點,其中0表示最左邊的位置。如果SelStart屬性值大於或等於文字中的字元數,那麼插入點就會被放在最後一個字元之後,如圖3.7所示。此範例的工作版,請參閱應用程式範例Controls.vbp中的Text.frm。 SelLength屬性是設定插入點寬度的數值。把SelLength設為大於0的值,會選取並反白從目前插入點開始的SelLength個字元。圖3.8顯示選擇的性能。
如果有一段文字被選中,此時使用者鍵入的文字將會取代已選取的文字。有些情況下,也可以用貼上指令用新文字取代原有的文字。 SelText屬性是一串文本,可以在運行時賦予它值以取代目前選取的文字。如果沒有選取的文本,SelText將在目前插入點插入文字。
詳細資訊關於TextBox控制項的屬性的詳細信息,請參閱第七章「使用VisualBasic的標準控制項」。
詳細資訊關於TextBox控制項的屬性的詳細信息,請參閱第七章「使用VisualBasic的標準控制項」。
->