![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
第二章: vb界面設計(重點概述) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.4 定制菜單 1. 菜單概述 Windows中的菜單一般由菜單條、菜單、菜單項、子菜單、彈出式菜單組成。 2. 普通菜單的設計 (1) 給菜單命名 菜單標題和菜單命令也有Caption和Name屬性,設置了這兩個屬性就等于創建了菜單。Name是一個抽象名稱,Caption是屏幕上可見的,可在Caption里加入 “&” 來設置熱鍵。 (2) 增加和刪除菜單 在Menu Editor中部有三個命令鈕分別是下一個、插入、刪除。插入可用來增加新的菜單。在這三個鍵下面的Caption列表框里選中菜單項(這時它的底色就變成深藍色),單擊插入鍵,Visual Basic將上一個增亮菜單下推并增亮一空行,就可以輸入新菜單名和標題了。刪除鍵可用來刪掉菜單。選中要刪掉的菜單,單擊Delete鍵就可以刪掉它了。 (3) 移動菜單標題 有四種情況:向上移動,向下移動,向左縮排,向右縮排,選中某一菜單標題,安上下箭頭,則這個菜單將上下移動到你喜歡的位置上,這也決定了它在界面中的位置。如果按左右箭頭,情況則有所不同。由于菜單是分級的,所以,如果它沒有縮排,則它是一個菜單標題;如果它縮排一次,那么它將變成一個菜單命令;如果縮排兩次,那么它將成為一個子菜單命令。VB里可以總共設計四層子菜單。 (4) 設置分離條 分離條是指在菜單中將命令分組的線,VB將分離條也看成一個菜單項,它也需要Caption和Name屬性,而且也有其它屬性,分離條與菜單項的區別是分離條的Caption屬性必須是連字號即減號。也就是,當設置了一個Caption屬性為 “-” 的菜單項時,實際上就設置了一個分離條,分離條的名字可以是barFile1之類,以表明分離條的位置。 (5) 菜單的各種簡單屬性 在菜單編輯器里有許多確認框和一些文本框及一個下拉式的列表框,這些決定了菜單的各種屬性。 1) Checked 復選屬性 這個屬性值設置為真,將在菜單命令左邊產生一個打勾的確認標志。 2) Enabled有效屬性 各種各樣的用戶會產生千奇百怪的操作,在許多Edit菜單里都會有不同形式的讓菜單命令模糊的情況。Enabled屬性為真,則菜單命令是清晰的,Enabled屬性為假,則菜單命令是模糊的,這時用戶就不能選中這個菜單項了。 3) Visible 可見屬性 對暫時不用的菜單, 如果把Visible屬性設為假,則菜單根本不會出現在屏幕上。這樣做比把Enabled屬性設為假顯得更加干脆! 4) Index屬性 可以生成菜單命令數組,用索引號區分開。例如向File菜單中添加一系列最近打開的文件名。添加菜單可用Load方法。以上屬性可以在運行時設置,形成動態的菜單的情況。 例如: mnuUndo.Enabled = False mnuProperty.Visible = False 還可以改變Caption等屬性。 mnuUndo.Caption = “Redo” (6)為每個菜單項編寫事件過程代碼 3. 生成彈出式菜單(或浮動菜單) 幾乎每個Windows應用程序都提供彈出式菜單,用戶可以右鍵單擊窗體或控件取得這個菜單。彈出式菜單也屬于普通菜單,只是不固定在窗體上,而是可以在任何地方顯示。 彈出式菜單用PopupMenu方法調用。假設已經用菜單編輯器生成了名為mnuedit的菜單,則可以在MouseUp事件加入如下代碼就可以生成彈出式菜單: If Button = 2 Then PopupMenu mnuedit 4.菜單設計示例 例 5 2.5 設計狀態條、工具欄、進程條等 1. 創建狀態條 選中狀態條,按F4鍵進入屬性窗口,雙擊(Custom)可以進入主要的設置窗口SBarCtrl屬性窗口。 (1) 選擇面板形狀 在SBarCtrl屬性窗口里選擇General標簽,在Style列表框里選擇多面板(缺省形式)或單面板簡單文本形式。 (2) 添加或刪除狀態條面板 在SBarCtrl屬性窗口里選擇Panels標簽,單擊Insert按鈕添加一個面板,或單擊Remove按鈕刪除一個面板。 (3) 在單面板里顯示文本 在SBarCtrl屬性窗口里選擇General標簽,在SimpleText框里輸入想顯示在狀態條面板里的文本。用代碼顯示的方式是: StatusBar1.SimpleText = "New string to appear" (4) 在多面板里顯示文本或圖形 1). 在SBarCtrl屬性窗口里選擇Panels標簽,用Index旁的按鈕選擇面板序號。 2). 在Text框里輸入想顯示在狀態條面板里的文本。 3). 如果想加入圖形,單擊Browse按鈕打開一個圖形選擇對話框,選擇想加入的圖形,然后單擊打開按鈕。 4). 最后按確定按鈕。 5). 用代碼顯示的方式是:StatusBar1.Panels(x).Text = "New string to appear" 6). 編寫代碼 如果是一個單面板狀態條,當用戶單擊狀態條時,只需用下面的事件過程來響應: Private Sub StatusBar1_Click() End Sub 如果是一個多面板狀態條,就需要鑒別用戶單擊的是哪一個面板,可用下面的事件過程來識別用戶所單擊的面板: Private Sub StatusBar1_PanelClick(ByVal Panel As Panel) Select Case Panel.Index Case 1 'Code to follow if user clicks the first panel Case 2 'Code to follow if user clicks the second panel Case 3 'Code to follow if user clicks the third panel End Select End Sub 2. 創建工具欄 1. 建立工具條 1).在工具箱里單擊工具條圖標,拖到窗體的任何位置,Visual Basic自動將ToolBar移到頂部。 2).按F4鍵打開屬性窗口。 3).雙擊(Custom),打開ToolBar屬性窗口。 4). 選擇Buttons標簽。 5). 單擊Insert按鈕,Visual Basic就會在你的工具條上顯示一個空按鈕,現在為你的每一個按鈕重復這一步。 6). 單擊確定按鈕。 如果想把按鈕分組,首先生成一個分隔的按鈕,再在剛才提到的對話框里將這個按鈕的Style屬性改為3-Separator。 (2) 為工具條增加圖畫 1). 在Visual Basic工具箱里單擊ImageList圖標,并將它拖到窗體的任何位置(位置不重要,因為它總是不可見的)。 2). 按F4打開屬性窗口。 3). 雙擊(Custom),打開ImageListCtrl屬性窗口。 4). 選擇Image標簽。 5). 單擊Insert Picture,在現在圖形的對話框里選擇想使用的位圖或圖標,然后單擊打開按鈕。為每個想添加圖形的工具條按鈕重復此步。 6). 單擊確定按鈕。 7). 單擊工具條,按F4,雙擊(Custom),顯示ToolBar屬性對話框。 8). 選擇General標簽,在ImageList框里選擇剛才添加的ImageList控件。 9). 選擇Buttons標簽,單擊緊挨Index框的向左或向右箭頭以選擇一個按鈕序號。出現在工具條最左邊的按鈕序號為1。 10). 在Image框里輸入一個數,輸入為1,則顯示剛才ImageList控件里的第一個圖形,輸入為2,則顯示剛才ImageList控件里的第二個圖形。 11). 為每個按鈕重復第10步。 12). 單擊確定按鈕,現在Visual Basic就會在工具條上顯示精美的圖形了。 (3) 為工具條添加文本信息 在ToolBar屬性對話框中選擇Buttons標簽,在Caption框里輸入想顯示在按鈕上的文本。 (4) 添加ToolTips ToolTips是一種當點到工具按鈕時彈出的小標簽。ToolTips很方便,可以告訴那些新手每個按鈕是干什么用的。在剛才提到的ToolBar屬性對話框中選擇Buttons標簽,在ToolTipText框里輸入想作為ToolTip的文本。 (5) 編寫代碼 雙擊工具條,以下面的格式輸入代碼就可以了: Private Sub Toolbar1_ButtonClick(ByVal Button As Button) Select Case Button.Index Case 1 'Code to follow if user clicks the first button Case 2 'Code to follow if user clicks the second button Case 3 'Code to follow if user clicks the third button End Select End Sub 3. 創建進程條 進程條的三個屬性: (1). Min屬性代表進程條全空時的值,缺省時為0。 (2). Max屬性代表進程條全空時的值,缺省時為100。 (3) Value屬性代表進程條當前的值(不用在屬性窗口里找這個屬性,它不出現在屬性窗口中,但它的確存在),它大于Min屬性,小于Max屬性。改變Value屬性的值將改變進程條的進度顯示。 為了了解進程條的功能,在窗體里添加一個進程條和一個命令鈕,雙擊命令鈕進入代碼窗口,鍵入如下代碼: Private Sub Command1_Click() If ProgressBar1.Value < ProgressBar1.Max Then ProgressBar1.Value = ProgressBar1.Value + 5 Else ProgressBar1.Visible = False ‘當進程條滿了的時候讓進程條消失 End If End Sub 4. 創建滑塊 (1). 選擇滑塊的外觀 1). Orientation屬性決定滑塊的方位,可以是垂直的或水平的滑塊。 2). TickStyle屬性決定滑塊標記的樣子。 3). TickFrequency屬性規定了沿著滑塊的標記的間隔大小,缺省的狀態是1,表明每個可能值都出現標記,如果把值設置為3,則每三個可能值出現一個標記。 (2) 滑塊的Min,Max,Value屬性 這三個屬性和進程條的這三個屬性差不多,Min,Max表示滑塊的最小和最大值,Value表示進程條的當前值。 (3) 滑塊的LargeChange,SmallChange屬性 LargeChange規定了當用戶用鼠標單擊滑塊時,滑塊可移動的距離。SmallChange規定了用戶按左箭頭或右箭頭時滑塊的移動距離。 5. 創建TabStrip頁框控件 (1) 設置樣式 在TabStrip屬性窗口里選擇General標簽,在Style列表框里選擇Tabs或Buttons樣式。 (2) 規定TabStrip的標題和ToolTips 1). 在TabStrip屬性窗口里選擇Tabs標簽,在Caption框里輸入標題。 2). 在TabStrip屬性窗口里選擇Tabs標簽,在ToolTipText框里輸入ToolTip。 (3) 增減標簽總數 在TabStrip屬性窗口里選擇Tabs標簽,單擊Insert Tab按鈕增加標簽,單擊Remove Tab按鈕刪除標簽。 (4) 在TabStrip上顯示圖形 1) 在窗體里拖入一個ImageList控件, 2) 按F4打開屬性窗口。 3) 雙擊(Custom),打開ImageListCtrl屬性窗口并選擇Image標簽。 4) 單擊Insert Picture,在現在圖形的對話框里選擇想使用的位圖或圖標,然后單擊打開按鈕。為每個想添加圖形的Tab按鈕重復此步。 5) 單擊確定按鈕,F在ImageList里存儲了需要的圖形。 6) 選擇TabStrip,進入TabStrip屬性窗口并選擇General標簽,在ImageList列表框里選擇ImageList1。 7) 現在選擇Tabs標簽,單擊緊挨Index框的向左或向右箭頭以選擇一個Tab序號。在Image框里輸入一個數,輸入為1,則顯示剛才ImageList控件里的第一個圖形,輸入為2,則顯示剛才ImageList控件里的第二個圖形。 8) 單擊確定按鈕。 (5) 用戶響應 可用類似下面的代碼來識別用戶在哪一個項目上單擊。 Private Sub TabStrip1_Click() Select Case TabStrip1.SelectedItem.Index Case 1 'Code to follow if user clicks the first tab Case 2 'Code to follow if user clicks the second tab Case 3 'Code to follow if user clicks the third tab End Select End Sub (6) 在TabStrip上放置其它控件 在用戶選擇了標簽后,TabStrip要求編寫代碼來顯示或隱藏控件。下面的代碼上是一個TabStrip上有一個命令鈕和一個選項鈕的例子,當用戶選擇了第一個Tab時,選項鈕出現,當用戶選擇了第二個Tab時,命令鈕出現。 Private Sub TabStrip1_Click() Select Case TabStrip1.SelectedItem.Index Case 1 Command1.Visible = False Option1.Visible = True Case 2 Command1.Visible = True Option1.Visible = False End Select End Sub 2.6 Visual Basic的輸入機制 程序的基本操作就是數據的輸入,數據處理和數據的輸出。Visual Basic可中用于輸入的控件主要有:文本框Text Box、復選框Check Box、選項按鈕Option Button、列表框List Box、組合框Combo Box、滾動條Scroll Bar、通用對話框控件。還有一個函數叫InputBox函數,也可用于數據的輸入。 1. 通過文本框輸入數據 只要取得文本框的Text屬性就可以對其進行操作了。下面的代碼可將Text1文本框的正文變成大寫輸出至Text2文本框。 Private Sub Form_Click () Text2.Text = UCase(Text1.Text) End Sub 2. 通過復選框和選項按鈕輸入數據 只要檢測到Check Box和Radio Button的Value屬性值就可以知道它們是否被選上了。 3. 通過列表框和組合框輸入數據 (1) 列表框List Box和組合框Combo Box的不同 它們在Windows的Open,Save As對話框里最為常見。組合框又包括三種類型,這三種類型要在它的Style屬性里設置。列表框僅僅把可以選擇的項目列出來,而組合框里有的類型可以允許用戶輸入數據。它們的異同是:
(2) 列表項目的增減 使用AddItem,RemoveItem語句可以增減列表項目。通常將項目增減的語句放入Form_Load事件里。 ListBoxName. AddItem item ComboBoxName. AddItem item item是新項目名稱,必須是字符串類型,非字符串類型可通過Str函數或Format函數來轉換。 列表框,組合框的每一項目都有一個Index值,第一個項目的Index值是0,第二個是1,依此類推。刪除項目可通過刪除其Index值來實現。 ListBoxName. RemoveItem item ComboBoxName. RemoveItem item 如:ListBoxName. RemoveItem 0則刪除了第一項,這時原來的第二項就變成了第一項。 可以在設計階段設定列表項目, 方法是: 在屬性窗口選擇List屬性,將出現一個下拉列表,在列表中輸入第一項,按Ctrl+Enter,輸入第二項……,最后用Enter結束。 (3) 取得列表框/組合框的數據 可以通過取得Text屬性或通過取得ListIndex屬性來判斷哪一項被選擇了。ListIndex屬性的值也同樣是第一個為0,第二個為1……如: If List1.Text = “Visual Basic” Then Instructions If List1.ListIndex = 1 Then Instructions 組合框有時允許用戶自己輸入數據,這時所輸入數據的ListIndex值為-1。 4. 通過滾動條Scroll Bar取得數據 在Visual Basic的工具箱里有兩種滾動條:一種是垂直的,一種是水平的,它們的差異無非是擺放的方向不一樣。 (1) 滾動條的主要屬性及事件 1)Min,Max屬性 Min屬性決定滾動條最左端或最頂端所代表的值。Max屬性決定滾動條最右端或最下端所代表的值。 2)LargeChange,SmallChange屬性 SmallChange決定在滾動條兩端的箭頭鈕上單擊時改變的值。LargeChange決定在滑塊上方或下方區域單擊時改變的值。 3)Value屬性 Value屬性代表當前滑塊所處位置的值,這個值由滑塊的相對位置決定。 4)Change事件 當滑塊位置發生變化時就引發了Change事件。 (2) 取得滾動條的數據 滾動條并不是一個數據輸入的好控件,因為無法從滾動條上直接看出輸入的數據,但它的優點是可以表示一定范圍里的相對位置。為了得到數據,只要取得滾動條的Value屬性就可以了。 5. InputBox函數 InputBox函數提供一個簡單的對話框供用戶輸入信息。在把其它版本的BASIC程序移植到Visual Basic時,InputBox函數通常用來代替INPUT語句。這個對話框的樣子基本上是上面的樣子。 它的完整語法是:x = InputBox (prompt, title, default, xpos, ypos, helpfile, context) 其中,prompt是提示的字符串,這個參數是必須的。title是對話框的標題,是可選的。default是文本框里的缺省值,也是可選的。xpos,ypos決定輸入框的位置。helpfile,context用于顯示與該框相關的幫助屏幕。返回值 x 將是用戶在文本框里輸入的數據,x是一個字符串類型的值。如果用戶按了Cancel鈕,則 x 將為空字符串。 6. 使用通用對話框控件 Windows應用程序里的Open對話框,Save As對話框在各個應用程序里看起來都是一樣的,通用對話框控件就可以提供這些對話框的標準功能。 (1) Open對話框及Save As對話框 打開Open對話框使用ShowOpen方法,打開Save As對話框使用ShowSave方法。 Private Sub mnuOpen_Click () On Error GoTo ErrorHandler CommonDialog1.CancelError = True CommonDialog1.Filter = "Text Files (*.txt)|*.txt|Batch Files (*.bat)|*.bat|All Files (*.*)|*.*" CommonDialog1.ShowOpen ' display Open common dialog box. Call OpenFile(CommonDialog1.FileName) ErrorHandler: Exit Sub End Sub 其中第三行決定了在文件格式類型欄里出現的文件類型。第五行需要一個自己的打開文件的過程,這個過程需要的參數就是通用對話框返回的文件名。通用對話框的CancelError屬性設為True的話,用戶單擊Cancel按鈕將產生一個錯誤信息程序,憑借這個信息程序可以檢測到用戶的放棄操作。 (2) Color對話框 下面的過程可用用戶選擇的顏色作為窗體的底色。 Private Sub mnuColor_Click () On Error GoTo CancelButton CommonDialog1.CancelError = True CommonDialog1.ShowColor Form1.BackColor = CommonDialog1.Color CancelButton: Exit Sub End Sub (3) Fonts對話框 下面的過程可用字體對話框改變文本框的字體: Private Sub mnuFonts_Click () On Error GoTo CancelButton CommonDialog1.CancelError = True CommonDialog1.Flags = cdlCFBoth ' Flags property must be set to cdlCFBoth CommonDialog1.ShowFont ' Display Font common dialog box. Text1.FontName = CommonDialog1.FontName Text1.FontSize = CommonDialog1.FontSize Text1.FontBold = CommonDialog1.FontBold Text1.FontItalic = CommonDialog1.FontItalic Text1.FontUnderline = CommonDialog1.FontUnderline Text1.FontStrikethru = CommonDialog1.FontStrikethru Text1.ForeColor = CommonDialog1.Color CancelButton: Exit Sub End Sub 代碼的第三行出現了通用對話框的Flags屬性決定了通用對話框的一些可選項,不過即使不賦值給Flags,代碼也一樣會按缺省的情況去執行的。 2.7 Visual Basic的輸出機制 作為輸出的對象,Visual Basic提供了標簽,文本框,窗體,圖片框(Picture Box)等用于輸出,而且Visual Basic里也有一堆命令、屬性涉及信息的輸出,較常用的有:MsgBox函數,Print方法,Cls方法,Tab函數,Format函數,FontName,FontSize,FontBold,FontItalic,FontStrikethru,FontUnderline屬性,CurrentX,CurrentY屬性等。 1. 通過MsgBox函數輸出 了解Windows應用程序的人都知道當用戶操作錯誤時,應用程序往往打出一個消息框來提示用戶的錯誤,象這樣: Dim Action As Integer Action = MsgBox("單擊確定鍵將引爆此計算機!", vbYesNo + vbCritical + vbDefaultButton2, "警告!") If Action = 6 Then Explode 這個功能在Visual Basic里是通過MsgBox函數來實現的,這樣程序員就不必自己去畫一個消息框了。語法是: Action = MsgBox (msg, type, title) 其中,msg是消息的內容,是一個字符串型的變量,type及title參數是可以省略的,type參數指定顯示的按鈕是什么及使用什么樣的圖標(這個參數往往讓新程序員思考幾分鐘),title參數指定消息框的標題。type參數的含義是:
例如:Action = MsgBox (“Are you girl?”, vbYesNo + vbQuestion, “Question”)。使用這個函數時Visual Basic將產生一個標題為Question,具有問號和Yes,No按鈕的消息框。作為一個函數,本質上還是要返回值的,MsgBox的返回值確定了用戶的選擇,程序可根據返回值做出相應的動作。
2. Print方法,Cls方法,Tab函數 (1) Print方法 Print 方法的語法是:object. Print expressionlist object表示Print作用的對象,比如是Form或者是Picture Box,object是可以省略的,省略時的Print往往在窗體上輸出。expressionlist是輸出的內容,允許許多項數據的輸出,在數據間可以加入“,”或”;”。加入分號將使下一數據項緊挨著上一數據項輸出。而加入逗號,則Visual Basic將下一數據項在下一打印區輸出,其實就是空了幾個空格后再輸出。兩個打印區之間有14個字符的寬度,其實這也很難衡量,比如14個“W”所占的寬度大概是14個“i”所占寬度的三倍多。幸好中國日本之類的方塊字所占的寬度基本上是一樣的,所以較好處理一些。 (2) Tab函數 Tab函數只用在Print方法中,它用來移動下一個字符到打印位置,這將省去數空格的功夫。語法是:Tab (column) Tab函數將Visual Basic自定義的14字符寬的打印區扔到一邊,用自己的方式定義了新的靈活的打印區寬度。 (3) Cls方法 Cls也是一個古老的BASIC語句,原來它的作用總是把屏幕變成黑色,然后在左上角或左下角閃爍一個光標,Visual Basic里它的作用是清除繪圖語句和Print語句產生的文字和圖形。 語法是:object. Cls object指清除的對象,可以是Form或Picture Box。如果object省略,通常Visual Basic都把當前的窗口作為Cls操作的對象。 3. Format函數 Format函數用于制定字符串或數字的輸出格式。語法是:x = Format (expression,fmt) expression是所輸出的內容。fmt是指輸出的格式,這是一個字符串型的變量,這一項若省略的話,那么Format函數將和Str函數的功能差不多。如:
簡單地,fmt里的字符是這樣的:
Format函數也可用來對時間進行輸出。
4. FontName,FontSize,FontBold,FontItalic,FontStrikethru,FontUnderline屬性 很明顯,這些屬性都與字體有關,許多控件都有這些屬性。通常它們在設計階段可以雙擊font屬性來設置,運行期間可以直接設置。它們的意義是:
如:Text1.FontBold = True,將把Text1文本框的FontBold屬性設為True。 5. 窗體,圖片框的CurrentX,CurrentY屬性 這兩個不可見的屬性確定了下一次打印或繪圖的水平及垂直坐標。如上面講的Print方法,當expression后使用 “,” 時,Visual Basic將改變CurrentX,CurrentY值為下一打印區域開始的值,于是,輸出便指向了下一個打印區域。而Cls方法將把操作對象的CurrentX,CurrentY的值設為(0,0)。 6. 通過標簽控件輸出 標簽控件的特點是運行時不能直接修改它,通常一個文本框旁邊都有一個標簽用來標識文本框。標簽的Autosize和WordWrap屬性是一對有用且令人困惑的屬性。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||