程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB6 >> vb的工具欄、對話框(一)

vb的工具欄、對話框(一)

編輯:VB6

可以用工具欄進一步增強應用程序的菜單界面。工具欄含有工具欄按鈕,它提供了對於應用程序中最常用的命令的快速訪問。例如:Visual Basic的工具欄含有執行常用命令的ToolBarButton,如“打開”(打開已存在的工程)、“保存”(存儲當前的工程),等等。

創建工具欄
工具欄(也稱為發條或者控制欄)已經成為許多基於Windows的應用程序的標准功能。工具欄提供了對於應用程序中最常用的菜單命令的快速訪問。使用ToolBar控件來創建工具欄非常容易且很方便,它在Visual Basic的專業版與企業版中是可用的。如果使用的是Visual Basic學習版,則可以像本章後面的“協調菜單與工具欄的外觀”所描述的那樣用手工來創建工具欄。
下列示例演示為MDI應用程序創建工具欄的過程;在標准窗體上創建一個工具欄的過程基本上一樣。
要手工創建工具欄,請按照以下步驟執行:
1. 在MDI窗體上放置一個圖片框。圖片框的寬度會自動伸展,直到填滿MDI窗體工作空間。工作空間就是窗體邊框以內的區 域,不包括標題條、菜單欄或所有的工具欄、狀態欄或者可能在窗體上的滾動條。
注意 只能把那些直接支持Align屬性的控件放置在MDI窗體上(圖片框是支持這一屬性的唯一的標准控件)。
2. 在圖片框中,可以放置任何想在工具欄上顯示的控件。典型地,用CommandButton或Image控件來創建工具欄按鈕。圖 6.16表示出了一個含有Image控件的工具欄。
要在圖片框中添加控件,單擊工具欄中的控件按鈕,然後在圖片框中畫出它。
注意 當MDI窗體中包含了圖片框時,該 MDI 窗體的內部區域不包括圖片框在內。例如:MDI窗體的ScaleHeigh屬性返回MDI窗體的內部高度,這個高度已不包括圖片框的高度。

3. 設置設計時屬性。
使用工具欄的一個好處是可以顯示一個形象的命令圖示。Image控件是作為工具欄按鈕的一個很好的選擇,因為可以用它來顯示一個位圖。在設計時設置其Picture屬性來顯示一個位圖;這樣,當該按鈕被單擊時,即能提供一個命令執行的可見信息。也可以通過設置按鈕的ToolTipText屬性來使用工具提示,這樣,當用戶把鼠標指針保持在一個按鈕上時,就可以顯示出該工具欄按鈕的名稱。
4. 編寫代碼
因為工具欄頻繁地用於提供對其它命令的快捷訪問,因而在大部分時間內都是從每一個按鈕的Click事件中調用其它過程,比如對應的菜單命令。
提示 可用一個不顯示工具欄的MDI窗體來使用在運行時不可見的控件(比如Timer控件)。為了做到這一點,在MDI窗體上放置一個圖片框,把控件放到圖片框中,然後把圖片框的Visible屬性設置為False。

編寫工具欄的代碼
工具欄用於提供訪問某些應用程序命令的快捷方法。例如:圖 6.16 中工具欄上的第一個按鈕就是“新建文件”命令的快捷鍵。現在,可以在MDINotePad示例應用程序中三個地方請求創建新文件。
1.在MDI窗體上(MDI窗體上“文件”菜單中的“新建”命令)。
2.在子窗體上(在子窗體“文件”菜單上的“新建”命令)。
3.在工具欄上(“新建文件”按鈕)。
與其把這個代碼重復三次,還不如從子窗體的mnuFileNew_Click事件取出原代碼,然後把它放入子窗體的一個公用過程中。可以從上面任何一個事件過程調用這個過程。以下是一個示例:
'這個例程在公共過程中。
Public Sub FileNew ()
Dim frmNewPad As New frmNotePad
frmNewPad.Show
End Sub

'在子窗體的“文件”菜單上選取“新建”。
Private Sub mnuchildFileNew_Click ()
FileNew
End Sub

'在 MDI 窗體的“文件”菜單上選取“新建”。
Private Sub mnumdiFileNew_Click ()
frmNotePad.FileNew
End Sub

'在工具欄上單擊“新建文件”按鈕。
Private Sub btnFileNew_Click ()
frmNotePad.FileNew
End Sub

協調菜單與工具欄的外觀
當由其它應用程序提供的對象在窗體中被激活時,有許多方法讓對象的菜單與工具欄出現在容器窗體內;然而,需要規定它們將如何顯示。這一過程叫做用戶界面協調,因為Visual Basic與已經鏈接或嵌入的對象必須協調容器窗體中的空間。

控制菜單的外觀
通過設置窗體的NegotiateMenus屬性可以決定一個鏈接或嵌入的對象的菜單是否出現在容器窗體中。如果子窗體的NegotiateMenus屬性置為True(缺省),而且容器有一個定義的菜單欄,那麼,當這個對象被激活時,它的菜單就放置在容器的菜單欄中。如果容器沒有菜單欄,或者NegotiateMenus 屬性被設置為False,那麼,當這個對象激活時對象的菜單將不出現。
注意 NegotiateMenus屬性不適用於MDI窗體。

控制工具欄的外觀
MDI窗體的NegotiateToolbars屬性決定了鏈接或嵌入對象的工具欄是不固定的調色板還是被放置在父窗體上。這種性能不要求工具欄出現在MDI父窗體上。如果MDI窗體的NegotiateToolbars屬性設為True,則對象的工具欄出現在MDI父窗體上。如果NegotiateToolbars設為False,則對象的工具欄就為不固定的調色板。
注意 NegotiateToolbars屬性只用於MDI窗體。
如果MDI窗體包含工具欄,它通常被包含在父窗體的PictureBox控件中。圖片框的Negotiate屬性決定了被激活時容器的工具欄是繼續顯示還是被對象的工具欄所代替。如果Negotiate設置為True,則除了容器的工具欄外還顯示對象的工具欄。如果Negotiate設置為False,則對象的工具欄代替容器的工具欄。
注意 菜單與工具欄的協調只發生在支持現場激活的可插入對象之上。有關現場激活的詳細信息,請參閱第十章“用部件編程”。用以下過程可以看到這三個屬性如何交互作用。
要執行菜單與工具欄的協調,請按照以下步驟執行:
1. 在MDI窗體中添加工具欄。這在本章前面的“創建工具欄”中描述過。
2. 在子窗體上放置一個可插入的對象。
3. 設置NegotiateMenus、NegotiateToolbars以及Negotiate屬性。
4. 運行此應用程序,然後雙擊該對象。

對話框

在基於Windows的應用程序中,對話框被用來:
提示用戶提供應用程序繼續執行所需要的數據。
向用戶顯示信息。
例如,在Visual Basic中,用“打開文件”對話框來顯示已存在的工程。VisualBasic中的“關於”對話框也是一個如何使用對話框來顯示信息的例子。在菜單欄上單擊“幫助”,選擇“關於Visual Basic”菜單項,則顯示“關於”對話框。

模式與無模式的對話框
對話框不是模式就是無模式的。模式對話框,在可以繼續操作應用程序的其他部分之前,必須被關閉(隱藏或卸載)。例如,如果一個對話框,在可以切換到其它窗體或對話框之前要求先單擊“確定”或“取消”,則它就是模式的。
Visual Basic中的“關於”對話框是模式的。顯示重要消息的對話框總應當是模式的——那就是說,在繼續做下去之前,總是要求用戶應當先關上對話框或者對它的消息作出響應。
無模式的對話框允許在對話框與其他窗體之間轉移焦點而不用關閉對話框。當對話框正在顯示時,可以在當前應用程序的其他地方繼續工作。無模式對話框很少使用。Visual Basic中“編輯”菜單中的“查找”對話框就是一個無模式對話框的實例。無模式對話框用於顯示頻繁使用的命令與信息。
要將窗體作為模式對話框顯示,請
1.使用Show方法,其style參數值為vbModal(一個值為1的常數)。例如:
'將frmAbout 為模式對話框顯示。
frmAbout.Show vbModal
要將窗體作為無模式對話框顯示,請
2.使用不帶style參數的Show方法。
例如:
'將frmAbout作為無模式對話框顯示。
frmAbout.Show
注意 如果窗體顯示為模式對話框,則只有當對話框關閉之後,在Show方法後的代碼才能執行。然而,當窗體被顯示為無模式對話框時,在該窗體顯示出來以後,Show方法後面的代碼緊接著就會執行。
Show方法另有一個可選參數,owner,可用來指定窗體的父子關系。可將某個窗體名傳給這個參數,使得這個窗體成為新窗體的擁有者。要顯示一個窗體,作為另一個窗體的子窗體,請
這裡Show方法有兩個參數:style和owner。
例如:
' 將frmAbout顯示為frmMain的無模式子窗體。
frmAbout.Show vbModeless, frmMain
在Show方法中使用 owner 參數,確保對話框在它的父窗體最小化時它也最小化,或者在其父窗體關閉時它也卸載。

預定義對話框的使用
在應用程序中添加對話框最容易的方法是使用預定義對話框,因為不必考慮設計、裝載或者顯示對話框方面的問題。然而,控件在其外觀上要受到限制。預定義的對話框總是模式的。
下表列出了 Visual Basic應用程序中添加預定義對話框時能使用的函數。

用輸入框來提示輸入
應用InputBox 函數請求提供數據。這個函數顯示要求輸入數據的模式對話框。圖 6.17 所示的文本輸入框提示輸入要打開文件的名稱。

以下代碼顯示圖 6.17 中所示的輸入框。
FileName = InputBox("Enter file to open:", "File Open")
注意 切記當使用 InputBox 函數時,對對話框的各部分的控制非常有限。只能改變標題欄中的文本、顯示給用戶的命令提示、對話框在屏幕上的位置以及它是否顯示一個“幫助”按鈕。
詳細信息 請參閱《語言參考》的“InputBox 函數”。

用消息對話框顯示信息
可以用 MsgBox 函數獲得“是”或者“否”的響應,並顯示簡短的消息,比如:錯誤、警告或者對話框中的期待。看完這些消息以後,可選取一個按鈕來關閉該對話框。
如果文件不能打開,那麼名為 Text Editor 的應用程序就會顯示如圖 6.18 所示的消息對話框。

以下代碼顯示如圖 6.18 所示的消息框:
MsgBox "Error encountered while trying to open file, _
please retry.", vbExclamation, "Text Editor"
注意 所謂模式的,既可以局限於應用程序中,也可以局限於系統中。如果消息框的模式局限在應用程序中(缺省),則在這個對話框未消失之前不能切換到該應用程序的其他部分,但是可以切換到其他應用程序。在消息框未消失之前系統的模式消息框不允許切換到別的應用程序。
詳細信息 請參閱《語言參考》的“MsgBox 函數”。

用窗體作為自定義對話框
自定義對話框就是用戶所創建的含有控件的窗體——這些控件包括命令按鈕、選取按鈕和文本框——它們可以為應用程序接收信息。通過設置屬性值來自定義窗體的外觀。也可以編寫在運行時顯示對話框的代碼。
要創建自定義對話框,可以從新窗體著手,或者自定義現成的對話框。如果重復過多,可以建造能在許多應用程序中使用的對話框的集合。
要自定義現存的對話框,請按照以下步驟執行:
1. 從“工程”菜單中選取“添加窗體”,在工程中添加一現存的窗體。
2. 從“文件”菜單中選取“filename 另存為”並輸入新的文件名(這可以防止改變已存在的窗體版本)。
3. 根據需要自定義窗體的外觀。
4. 在代碼窗口中自定義事件過程。
要創建新的對話框,請按照以下步驟執行:
1. 從“工程”菜單中選取“添加窗體”。
- 或者 -
在工具欄上單擊“窗體”按鈕,創建新的窗體。
2. 如有必要,自定義窗體外觀。
3. 在“代碼”窗口中自定義事件過程。
有很大的自由來定義自定義對話框的外觀。它可以是固定的或可移動的、模式或無模式的。它可以包含不同類型的控件;然而,對話框通常不包括菜單欄、窗口滾動條、最小化與最大化按鈕、狀態條或者尺寸可變的邊框。本主題余下的部分將討論創建典型類型的對話框方法。

添加標題
對話框總應當有標識它的標題。要創建標題,設置該窗體的 Caption 屬性為將在標題條中顯示的文本字符串。通常,這一步是在設計時使用“屬性”窗口來完成的,但也可以用代碼來完成這一步。例如:
frmAbout.Caption = "About"
提示 如果想完全刪除此標題欄,可以設置窗體的 ControlBox、MinButton 和MaxButton 為 False;設置 BorderStyle 為尺寸不可變的設置(0、1 或 3),並設置 Caption 為空字符串 ("")。

設置標准對話框的屬性
一般來說,用戶響應對話框時,先提供信息,然後用“確定”或者“取消”命令按鈕關閉對話框。因為對話框是臨時性的,用戶通常不需要對它進行移動、改變尺寸、最大化或最小化等操作。其結果是:隨新窗體出現的可變尺寸邊框類型、“控制”菜單框、“最大化”按鈕以及“最小化”按鈕,在大多數對話框中都是不需要的。
通過設置 BorderStyle、ControlBox、MaxButton 和 MinButton 屬性,可以刪除這些項目。例如,“關於”對話框可能使用以下的屬性設置。

記住,如果刪除“控制”菜單框 ( ControlBox = False ),則必須向用戶提供退出該對話框的其它方法。實現的辦法通常是在對話框中添加“確定”、“取消”或者“退出”命令按鈕,並在隱藏或卸載該對話框的 Click 按鈕事件中添加代碼。

添加和放置命令按鈕
模式對話框必須至少包含一個退出該對話框的命令按鈕。通常用兩個命令按鈕:其中一個按鈕開始動作,而另一個按鈕關閉該對話框而不做任何改變。典型狀態是,這兩個按鈕的 Caption 屬性設置“確定”與“取消”。在這個方案中,“確定”命令按鈕的 Default 屬性設置為 True,而 Cancel 命令按鈕的 Cancel 屬性設置為 True。雖然“確定”與“取消”是最常用的按鈕,其他的按鈕標題組合也可使用。

顯示消息的對話框通常使用 Label 控件來顯示錯誤消息或者命令提示,並且用一至兩個命令按鈕來執行動作。例如,也許給標識的 Caption 屬性賦以錯誤消息或者命令提示,而給兩個命令按鈕控件的 Caption 屬性指定“是”與“否”。當用戶選取“是”,則發生一個動作,當選取“否”時,則發生另一個動作。
這種類型對話框的命令按鈕通常被放置在對話框的底部或右邊,而頂部或左邊的按鈕為缺省按鈕,如圖 6.19 所示。

設置缺省、取消和焦點
命令按鈕控件提供了以下的屬性:
Default
Cancel
TabIndex
TabStopDefault
按鈕就是當用戶按下 ENTER 鍵時選中的按鈕。在一個窗體上,只能有一個命令按鈕的 Default 屬性可以設置為 True。按下 ENTER 鍵就調用缺省命令按鈕的Click事件。這個功能連同編輯控件(比如 TextBox )一起工作。例如,可以在文本框中鍵入數據,然後按下 ENTER 鍵來產生Click 事件,以取代選取“確定”按鈕。
“取消”按鈕就是當按下 ESC 鍵時選中的按鈕。在一個窗體上,只能有一個命令按鈕的 Cancel 屬性可以設置為 True。按下 ESC 鍵調用“取消”命令按鈕的Click事件。“取消”按鈕也可以為缺省命令按鈕。要指定對話框的“取消”按鈕,設置該命令按鈕的Cancel屬性為True。
提示 一般說來,代表最可靠的或者最安全的操作的按鈕應當是缺省按鈕。例如,在“文本替換”對話框中,“取消”應當是缺省按鈕,而不是“全部替換”。
也可以指定當對話被顯示時具有焦點的按鈕。當窗體被顯示時,帶有最低的 TabIndex 設置的控件接收焦點。按下 ENTER 鍵會調用缺省命令按鈕或者有焦點的命令按鈕的Click事件。要在窗體被顯示時將焦點給某個命令按鈕,則設置該命令按鈕的 TabIndex 為 0,它的TabStop屬性為 True。也可以用 SetFocus 方法在窗體被顯示時將焦點給指定的控件。
詳細信息 請參閱《語言參考》的“TabIndex 屬性”與“TabStop 屬性”。

使對話框上的控件無效
有時候需要使控件無效,因為它們的動作在當前的上下文中不適用。例如,當 Visual Basic的“查找”對話框第一次顯示時,“查找下一個”按鈕應無效,如圖 6.20 所示。設置對話上的控件的 Enabled 屬性為 False,可以使其無效。
要使對話框上的控件無效,請
1.設置每個控件的 Enabled 屬性為 False。例如:
cmdFindNext.Enabled = False
cmdReplace.Enabled = False

顯示自定義對話框
使用應用程序中顯示其他窗體同樣的方法來顯示對話框。當應用程序運行時,啟動窗體會自動裝入。想在應用程序中出現第二個窗體或對話框,要用裝入並顯示它的代碼來實現。同樣,想要窗體或對話框消失,也要編寫卸載或隱藏它的代碼。
以下代碼在用戶選取“幫助”菜單中的“關於”菜單項時顯示“關於”對話框。
Private Sub mnuHelpAbout_Click ()
'此處用 style = vbModal 的 Show 方法將對話框顯示為模式的。
frmAbout.Show vbModal 
End Sub

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved