日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

VB- 工具欄、對(duì)話框

 悟靜 2009-06-02
工具欄
    可以用工具欄進(jìn)一步增強(qiáng)應(yīng)用程序的菜單界面。工具欄含有工具欄按鈕,它提供了對(duì)于應(yīng)用程序中最常用的命令的快速訪問(wèn)。例如:Visual Basic 的工具欄含有執(zhí)行常用命令的 ToolBarButton,如“打開(kāi)”(打開(kāi)已存在的工程)、“保存”(存儲(chǔ)當(dāng)前的工程),等等。

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

    3. 設(shè)置設(shè)計(jì)時(shí)屬性。
    使用工具欄的一個(gè)好處是可以顯示一個(gè)形象的命令圖示。Image 控件是作為工具欄按鈕的一個(gè)很好的選擇,因?yàn)榭梢杂盟鼇?lái)顯示一個(gè)位圖。在設(shè)計(jì)時(shí)設(shè)置其 Picture 屬性來(lái)顯示一個(gè)位圖;這樣,當(dāng)該按鈕被單擊時(shí),即能提供一個(gè)命令執(zhí)行的可見(jiàn)信息。也可以通過(guò)設(shè)置按鈕的 ToolTipText屬性來(lái)使用工具提示,這樣,當(dāng)用戶把鼠標(biāo)指針保持在一個(gè)按鈕上時(shí),就可以顯示出該工具欄按鈕的名稱。
    4. 編寫代碼
    因?yàn)楣ぞ邫陬l繁地用于提供對(duì)其它命令的快捷訪問(wèn),因而在大部分時(shí)間內(nèi)都是從每一個(gè)按鈕的 Click 事件中調(diào)用其它過(guò)程,比如對(duì)應(yīng)的菜單命令。
    提示 可用一個(gè)不顯示工具欄的 MDI 窗體來(lái)使用在運(yùn)行時(shí)不可見(jiàn)的控件(比如 Timer 控件)。為了做到這一點(diǎn),在 MDI 窗體上放置一個(gè)圖片框,把控件放到圖片框中,然后把圖片框的 Visible 屬性設(shè)置為 False。

    編寫工具欄的代碼
    工具欄用于提供訪問(wèn)某些應(yīng)用程序命令的快捷方法。例如:圖 6.16 中工具欄上的第一個(gè)按鈕就是“新建文件”命令的快捷鍵?,F(xiàn)在,可以在 MDINotePad 示例應(yīng)用程序中三個(gè)地方請(qǐng)求創(chuàng)建新文件。
    1.在 MDI 窗體上(MDI 窗體上“文件”菜單中的“新建”命令)。
    2.在子窗體上(在子窗體“文件”菜單上的“新建”命令)。
    3.在工具欄上(“新建文件”按鈕)。
    與其把這個(gè)代碼重復(fù)三次,還不如從子窗體的 mnuFileNew_Click 事件取出原代碼,然后把它放入子窗體的一個(gè)公用過(guò)程中??梢詮纳厦嫒魏我粋€(gè)事件過(guò)程調(diào)用這個(gè)過(guò)程。以下是一個(gè)示例:
      '這個(gè)例程在公共過(guò)程中。
      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

    協(xié)調(diào)菜單與工具欄的外觀
    當(dāng)由其它應(yīng)用程序提供的對(duì)象在窗體中被激活時(shí),有許多方法讓對(duì)象的菜單與工具欄出現(xiàn)在容器窗體內(nèi);然而,需要規(guī)定它們將如何顯示。這一過(guò)程叫做用戶界面協(xié)調(diào),因?yàn)?Visual Basic 與已經(jīng)鏈接或嵌入的對(duì)象必須協(xié)調(diào)容器窗體中的空間。

    控制菜單的外觀
    通過(guò)設(shè)置窗體的 NegotiateMenus 屬性可以決定一個(gè)鏈接或嵌入的對(duì)象的菜單是否出現(xiàn)在容器窗體中。如果子窗體的 NegotiateMenus 屬性置為 True(缺?。?,而且容器有一個(gè)定義的菜單欄,那么,當(dāng)這個(gè)對(duì)象被激活時(shí),它的菜單就放置在容器的菜單欄中。如果容器沒(méi)有菜單欄,或者NegotiateMenus 屬性被設(shè)置為 False,那么,當(dāng)這個(gè)對(duì)象激活時(shí)對(duì)象的菜單將不出現(xiàn)。
    注意 NegotiateMenus 屬性不適用于 MDI 窗體。

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

對(duì)話框

    在基于 Windows 的應(yīng)用程序中,對(duì)話框被用來(lái):
     提示用戶提供應(yīng)用程序繼續(xù)執(zhí)行所需要的數(shù)據(jù)。
     向用戶顯示信息。
    例如,在 Visual Basic 中,用“打開(kāi)文件”對(duì)話框來(lái)顯示已存在的工程。VisualBasic 中的“關(guān)于”對(duì)話框也是一個(gè)如何使用對(duì)話框來(lái)顯示信息的例子。在菜單欄上單擊“幫助”,選擇“關(guān)于 Visual Basic”菜單項(xiàng),則顯示“關(guān)于”對(duì)話框。

    模式與無(wú)模式的對(duì)話框
    對(duì)話框不是模式就是無(wú)模式的。模式對(duì)話框,在可以繼續(xù)操作應(yīng)用程序的其他部分之前,必須被關(guān)閉(隱藏或卸載)。例如,如果一個(gè)對(duì)話框,在可以切換到其它窗體或?qū)υ捒蛑耙笙葐螕?#8220;確定”或“取消”,則它就是模式的。
    Visual Basic 中的“關(guān)于”對(duì)話框是模式的。顯示重要消息的對(duì)話框總應(yīng)當(dāng)是模式的——那就是說(shuō),在繼續(xù)做下去之前,總是要求用戶應(yīng)當(dāng)先關(guān)上對(duì)話框或者對(duì)它的消息作出響應(yīng)。
    無(wú)模式的對(duì)話框允許在對(duì)話框與其他窗體之間轉(zhuǎn)移焦點(diǎn)而不用關(guān)閉對(duì)話框。當(dāng)對(duì)話框正在顯示時(shí),可以在當(dāng)前應(yīng)用程序的其他地方繼續(xù)工作。無(wú)模式對(duì)話框很少使用。Visual Basic 中“編輯”菜單中的“查找”對(duì)話框就是一個(gè)無(wú)模式對(duì)話框的實(shí)例。無(wú)模式對(duì)話框用于顯示頻繁使用的命令與信息。
    要將窗體作為模式對(duì)話框顯示,請(qǐng)
    1.使用 Show 方法,其 style 參數(shù)值為 vbModal(一個(gè)值為 1 的常數(shù))。例如:
     '將 frmAbout 作為模式對(duì)話框顯示。
     frmAbout.Show vbModal
    要將窗體作為無(wú)模式對(duì)話框顯示,請(qǐng)
    2.使用不帶 style 參數(shù)的 Show方法。
    例如:
    '將 frmAbout 作為無(wú)模式對(duì)話框顯示。
    frmAbout.Show
    注意 如果窗體顯示為模式對(duì)話框,則只有當(dāng)對(duì)話框關(guān)閉之后,在 Show 方法后的代碼才能執(zhí)行。然而,當(dāng)窗體被顯示為無(wú)模式對(duì)話框時(shí),在該窗體顯示出來(lái)以后,Show 方法后面的代碼緊接著就會(huì)執(zhí)行。
    Show 方法另有一個(gè)可選參數(shù),owner,可用來(lái)指定窗體的父子關(guān)系??蓪⒛硞€(gè)窗體名傳給這個(gè)參數(shù),使得這個(gè)窗體成為新窗體的擁有者。要顯示一個(gè)窗體,作為另一個(gè)窗體的子窗體,請(qǐng)
    這里 Show 方法有兩個(gè)參數(shù):style 和 owner。
    例如:
    ' 將 frmAbout 顯示為 frmMain 的無(wú)模式子窗體。
    frmAbout.Show vbModeless, frmMain
    在 Show 方法中使用 owner 參數(shù),確保對(duì)話框在它的父窗體最小化時(shí)它也最小化,或者在其父窗體關(guān)閉時(shí)它也卸載。

    預(yù)定義對(duì)話框的使用
    在應(yīng)用程序中添加對(duì)話框最容易的方法是使用預(yù)定義對(duì)話框,因?yàn)椴槐乜紤]設(shè)計(jì)、裝載或者顯示對(duì)話框方面的問(wèn)題。然而,控件在其外觀上要受到限制。預(yù)定義的對(duì)話框總是模式的。
    下表列出了 Visual Basic 應(yīng)用程序中添加預(yù)定義對(duì)話框時(shí)能使用的函數(shù)。
  

    用輸入框來(lái)提示輸入
    應(yīng)用 InputBox 函數(shù)請(qǐng)求提供數(shù)據(jù)。這個(gè)函數(shù)顯示要求輸入數(shù)據(jù)的模式對(duì)話框。圖 6.17 所示的文本輸入框提示輸入要打開(kāi)文件的名稱。

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

    用消息對(duì)話框顯示信息
    可以用 MsgBox 函數(shù)獲得“是”或者“否”的響應(yīng),并顯示簡(jiǎn)短的消息,比如:錯(cuò)誤、警告或者對(duì)話框中的期待??赐赀@些消息以后,可選取一個(gè)按鈕來(lái)關(guān)閉該對(duì)話框。
    如果文件不能打開(kāi),那么名為 Text Editor 的應(yīng)用程序就會(huì)顯示如圖 6.18 所示的消息對(duì)話框。

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

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

    添加標(biāo)題
    對(duì)話框總應(yīng)當(dāng)有標(biāo)識(shí)它的標(biāo)題。要?jiǎng)?chuàng)建標(biāo)題,設(shè)置該窗體的 Caption 屬性為將在標(biāo)題條中顯示的文本字符串。通常,這一步是在設(shè)計(jì)時(shí)使用“屬性”窗口來(lái)完成的,但也可以用代碼來(lái)完成這一步。例如:
    frmAbout.Caption = "About"
    提示 如果想完全刪除此標(biāo)題欄,可以設(shè)置窗體的 ControlBox、MinButton 和MaxButton 為 False;設(shè)置 BorderStyle 為尺寸不可變的設(shè)置(0、1 或 3),并設(shè)置 Caption 為空字符串 ("")。

    設(shè)置標(biāo)準(zhǔn)對(duì)話框的屬性
    一般來(lái)說(shuō),用戶響應(yīng)對(duì)話框時(shí),先提供信息,然后用“確定”或者“取消”命令按鈕關(guān)閉對(duì)話框。因?yàn)閷?duì)話框是臨時(shí)性的,用戶通常不需要對(duì)它進(jìn)行移動(dòng)、改變尺寸、最大化或最小化等操作。其結(jié)果是:隨新窗體出現(xiàn)的可變尺寸邊框類型、“控制”菜單框、“最大化”按鈕以及“最小化”按鈕,在大多數(shù)對(duì)話框中都是不需要的。
    通過(guò)設(shè)置 BorderStyle、ControlBox、MaxButton 和 MinButton 屬性,可以刪除這些項(xiàng)目。例如,“關(guān)于”對(duì)話框可能使用以下的屬性設(shè)置。

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

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

    顯示消息的對(duì)話框通常使用 Label 控件來(lái)顯示錯(cuò)誤消息或者命令提示,并且用一至兩個(gè)命令按鈕來(lái)執(zhí)行動(dòng)作。例如,也許給標(biāo)識(shí)的 Caption 屬性賦以錯(cuò)誤消息或者命令提示,而給兩個(gè)命令按鈕控件的 Caption 屬性指定“是”與“否”。當(dāng)用戶選取“是”,則發(fā)生一個(gè)動(dòng)作,當(dāng)選取“否”時(shí),則發(fā)生另一個(gè)動(dòng)作。
    這種類型對(duì)話框的命令按鈕通常被放置在對(duì)話框的底部或右邊,而頂部或左邊的按鈕為缺省按鈕,如圖 6.19 所示。


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

    使對(duì)話框上的控件無(wú)效
    有時(shí)候需要使控件無(wú)效,因?yàn)樗鼈兊膭?dòng)作在當(dāng)前的上下文中不適用。例如,當(dāng) Visual Basic 的“查找”對(duì)話框第一次顯示時(shí),“查找下一個(gè)”按鈕應(yīng)無(wú)效,如圖 6.20 所示。設(shè)置對(duì)話上的控件的 Enabled 屬性為 False,可以使其無(wú)效。
    要使對(duì)話框上的控件無(wú)效,請(qǐng)
    1.設(shè)置每個(gè)控件的 Enabled 屬性為 False。例如:
     cmdFindNext.Enabled = False
     cmdReplace.Enabled = False

    顯示自定義對(duì)話框
    使用應(yīng)用程序中顯示其他窗體同樣的方法來(lái)顯示對(duì)話框。當(dāng)應(yīng)用程序運(yùn)行時(shí),啟動(dòng)窗體會(huì)自動(dòng)裝入。想在應(yīng)用程序中出現(xiàn)第二個(gè)窗體或?qū)υ捒颍醚b入并顯示它的代碼來(lái)實(shí)現(xiàn)。同樣,想要窗體或?qū)υ捒蛳?,也要編寫卸載或隱藏它的代碼。
    以下代碼在用戶選取“幫助”菜單中的“關(guān)于”菜單項(xiàng)時(shí)顯示“關(guān)于”對(duì)話框。
    Private Sub mnuHelpAbout_Click ()
       '此處用 style = vbModal 的 Show 方法將對(duì)話框顯示為模式的。
       frmAbout.Show vbModal 
    End Sub
顯示選項(xiàng)
    代碼決定對(duì)話框?qū)⑷绾窝b入內(nèi)存與如何顯示。下表描述各種類型的顯示任務(wù)以及用來(lái)執(zhí)行這些任務(wù)的關(guān)鍵字。

    Show 方法裝入窗體并設(shè)置它的 Visible 屬性為 True。傳遞給 Show 方法的參數(shù)標(biāo)識(shí)了該對(duì)話框的類型。如果 style 參數(shù)省略或者設(shè)置為 vbModeless或 0(缺?。?,則對(duì)話框?yàn)闊o(wú)模式類型,如果 style 參數(shù)為 vbModal 或 1,則對(duì)話框?yàn)槟J筋愋汀?br>    當(dāng)選取“確定”或“取消”退出對(duì)話框時(shí),可使用 Unload 語(yǔ)句或者 Hide 方法。例如:
    Unload frmAbout
    - 或者 -
    frmAbout.Hide
    Unload 語(yǔ)句把對(duì)話框從內(nèi)存中刪除,而 Hide 方法只是通過(guò)設(shè)置對(duì)話框的Visible 屬性為 False 將其從視窗中刪除。當(dāng)卸載窗體時(shí),該窗體本身以及它的控件都從內(nèi)存中卸載(包括在運(yùn)行時(shí)裝入的任何控件)。當(dāng)隱藏窗體時(shí),該窗體以及它的控件仍留在內(nèi)存中?!   ‘?dāng)需要節(jié)省內(nèi)存空間時(shí),最好卸載窗體,因?yàn)樾遁d窗體可以釋放內(nèi)存。如果經(jīng)常使用對(duì)話框,可以選取隱藏窗體。隱藏窗體仍可以保留與它關(guān)聯(lián)的任何數(shù)據(jù),包括屬性值、打印輸出和動(dòng)態(tài)創(chuàng)建的控件。窗體被隱藏后,可以繼續(xù)從代碼中引用隱藏窗體的屬性與控件。

    各種顯示類型的設(shè)計(jì)
    Microsoft Windows 是與設(shè)備無(wú)關(guān)的-基于窗口的應(yīng)用程序可以在許多不同顯示分辨率與顏色濃度的計(jì)算機(jī)中運(yùn)行。同樣,用 Visual Basic 編寫的應(yīng)用程序也會(huì)在不同類型的顯示器上運(yùn)行,在設(shè)計(jì)應(yīng)用程序時(shí)需要考慮到這一點(diǎn)。

    設(shè)計(jì)與分辨率無(wú)關(guān)的窗體
    缺省情況下,當(dāng)改變屏幕分辨率時(shí),Microsoft Visual Basic 不會(huì)改變窗體與控件的尺寸。這就意味著在分辨率為 1024×768 的屏幕上設(shè)計(jì)的窗體,在分辨率為 640×480 的屏幕中運(yùn)行時(shí)會(huì)伸出屏幕的邊界之外。如果想創(chuàng)建不管使用什么樣的屏幕分辨率都能有相同比例的窗體和控件,必須在最低的分辨率下設(shè)計(jì)窗體,或者將改變窗體的代碼添加到程序中去。
    避免尺寸問(wèn)題的最簡(jiǎn)單的方法是在 640×480 的分辨率下設(shè)計(jì)窗體。如果更喜歡在高一些的分辨率下工作,仍需要考慮窗體在低一些的分辨率下將如何顯示。實(shí)現(xiàn)這一點(diǎn)的方法是用“Form Layout”窗口預(yù)覽窗體的大小和位置。您也可以使用“Resolution Guides”觀察在低分辨率時(shí)屏幕的哪些部分是可見(jiàn)的。要切換到“Resolution Guides”,可以在“Form Layout”窗口單擊鼠標(biāo)右鍵,從彈出菜單上選擇“Resolution Guides”菜單項(xiàng)。
    在運(yùn)行時(shí),Visual Basic 根據(jù)設(shè)計(jì)時(shí)的位置來(lái)放置窗體。如果設(shè)計(jì)時(shí)在 1024×768 的分辨率上運(yùn)行,并把窗體放到屏幕的右下角,則當(dāng)它在比較低的分辨率下運(yùn)行時(shí)該窗體可能看不見(jiàn)。為了避免這種情況的發(fā)生,在設(shè)計(jì)時(shí)可從“Form Layout”窗口的彈出菜單選擇“Startup Position”菜單項(xiàng)來(lái)設(shè)置窗體的啟動(dòng)位置。同樣,您也可以在運(yùn)行時(shí)用下面的 Form Load 事件中的代碼來(lái)設(shè)置窗體的位置:
    Private Sub Form_Load()
       Me.Move 0, 0
    End Sub
    盡管設(shè)置窗體的 Left 與 Top 的屬性都為 0 也能有同樣的效果,但 Move方法只要一步就能完成。
    Visual Basic 使用與設(shè)備無(wú)關(guān)的度量單位,緹,是用來(lái)計(jì)算尺寸與位置的單位。Screen 對(duì)象的兩個(gè)屬性 TwipsPerPixelX 與 TwipsPerPixelY 可以用來(lái)確定運(yùn)行時(shí)的顯示尺寸。應(yīng)用這些屬性,可以編寫代碼來(lái)調(diào)整窗體以及控件的尺寸與位置。
    Private Sub SetControls()
       Dim X As Integer
       Dim Y As Integer

       X = Screen.TwipsPerPixelX
       Y = Screen.TwipsPerPixelY
       Select Case X, Y
         Case 15, 15
             ' 重新改變控件尺寸及移動(dòng)控件。
             txtName.Height = 200
             txtName.Width = 500
             txtName.Move 200, 200
             ' 增加為其它分辨率編寫的代碼。
         …
    End Sub
    也需要知道在設(shè)計(jì)時(shí) Visual Basic 自身窗口的位置。如果在高分辨率下把“工程”窗口放置到屏幕的右邊,那么會(huì)發(fā)現(xiàn)在低分辨率下打開(kāi)工程時(shí),它不再是可訪問(wèn)的了。

    設(shè)計(jì)不同濃度的顏色
    在設(shè)計(jì)應(yīng)用程序時(shí),也需要考慮運(yùn)行應(yīng)用程序計(jì)算機(jī)可能的顏色顯示能力。有些計(jì)算機(jī)可以顯示 256 色或更多的顏色,而另一些只能顯示 16 種顏色。如果使用 256 色的調(diào)色板來(lái)設(shè)計(jì)窗體,那么在 16 色上顯示時(shí),抖動(dòng)(模仿無(wú)效顏色的一種方法)會(huì)使窗體上的一些元素消失。
    為了避免這種情況,最好把應(yīng)用程序使用的顏色局限于 Windows 標(biāo)準(zhǔn)的 16種顏色。這些顏色由 Visual Basic 的顏色常數(shù)來(lái)表示(如 vbBlack、vbBlue 和vbCyan 等等)。如果在應(yīng)用程序中需要用 16 種以上的顏色,那么對(duì)于文本、按鈕以及其他界面元素仍然應(yīng)當(dāng)堅(jiān)持用標(biāo)準(zhǔn)顏色。

    設(shè)計(jì)時(shí)心里想著用戶
    除非創(chuàng)建 Visual Basic 應(yīng)用程序完全只供自己使用,否則創(chuàng)作的價(jià)值只能由其他人來(lái)評(píng)價(jià)。應(yīng)用程序的用戶界面對(duì)用戶有極大的影響——無(wú)論代碼在技術(shù)上多么卓越,或者優(yōu)化得多么的好,如果用戶發(fā)現(xiàn)應(yīng)用程序很難使用,那么他們就難于很好地接受它。
    作為程序員,毫無(wú)疑問(wèn),對(duì)計(jì)算機(jī)方面技術(shù)已非常熟悉。因而很容易忘記大多數(shù)用戶不理解(而且也許并不在意)隱藏在應(yīng)用程序后面的技術(shù)。把應(yīng)用程序看作達(dá)到目的工具:完成任務(wù)的方法想象中應(yīng)比沒(méi)有計(jì)算機(jī)的幫助更容易。
    一個(gè)設(shè)計(jì)得好的用戶界面把用戶與基礎(chǔ)技術(shù)隔離開(kāi)來(lái),從而使完成預(yù)定的任務(wù)變得很容易。在設(shè)計(jì)應(yīng)用程序用戶界面的過(guò)程中,需要時(shí)時(shí)想到用戶。如何能無(wú)需指導(dǎo)就發(fā)現(xiàn)應(yīng)用程序的各種各樣的功能?當(dāng)錯(cuò)誤發(fā)生時(shí),應(yīng)用程序如何響應(yīng)?在幫助或輔助用戶方面將提供些什么?設(shè)計(jì)是否以一種藝術(shù)美來(lái)使用戶高興?以上這些問(wèn)題的答案以及其他有關(guān)用戶為中心的設(shè)計(jì)問(wèn)題,在本節(jié)中都將涉及到。

    界面設(shè)計(jì)的基礎(chǔ)
    不必成為創(chuàng)建用戶界面的藝術(shù)家——大多數(shù)用戶界面設(shè)計(jì)的原則,與任意一門基礎(chǔ)藝術(shù)課中所講授的基礎(chǔ)設(shè)計(jì)的原則相同。構(gòu)圖、顏色等的基本的設(shè)計(jì)原則,就像它們應(yīng)用在紙張或油畫上一樣,也能很好地在一臺(tái)計(jì)算機(jī)的屏幕上應(yīng)用。
    雖然 Visual Basic 能通過(guò)簡(jiǎn)單地將控件拖動(dòng)并放置到窗體上而使得創(chuàng)建用戶界面非常容易,但是,在設(shè)計(jì)之前稍微計(jì)劃一下就能使應(yīng)用程序的可用性有很大地改觀。可能需先在紙上畫出窗體開(kāi)始設(shè)計(jì),決定需要哪些控件,不同元素的相對(duì)重要性,以及控件之間的關(guān)系。

    構(gòu)圖:應(yīng)用程序的觀感與感覺(jué)
    窗體的構(gòu)圖或布局不僅影響它的美感,而且也極大地影響應(yīng)用程序的可用性。構(gòu)圖包括諸如控件的位置、元素的一致性、動(dòng)感、空白空間的使用以及設(shè)計(jì)的簡(jiǎn)單性等因素。

    控件的位置
    在大多數(shù)界面設(shè)計(jì)中,不是所有的元素都一樣重要。仔細(xì)地設(shè)計(jì)是很有必要的,以確保越是重要的元素越要很快地顯現(xiàn)給用戶。重要的或者頻繁訪問(wèn)的元素應(yīng)當(dāng)放在顯著的位置上,而不太重要的元素就應(yīng)當(dāng)降級(jí)到不太顯著的位置上。
    在大多數(shù)語(yǔ)言中我們習(xí)慣于在一頁(yè)之中從左到右、自上到下地閱讀。對(duì)于計(jì)算機(jī)屏幕也如此,大多數(shù)用戶的眼睛會(huì)首先注視屏幕的左上部位,所以最重要的元素應(yīng)當(dāng)放在屏幕的左上部位。例如,如果窗體上的信息與客戶有關(guān),則它的名字字段應(yīng)當(dāng)顯示在它能最先被看到的地方。而按鈕,如“確定”或“下一個(gè)”,應(yīng)當(dāng)放置在屏幕的右下部位;用戶在未完成對(duì)窗體的操作之前,通常不會(huì)訪問(wèn)這些按鈕。
    把元素與控件分成組也很重要。盡量把信息按功能或關(guān)系進(jìn)行邏輯地分組。因?yàn)樗麄兊墓δ鼙舜讼嚓P(guān),所以定位數(shù)據(jù)庫(kù)的按鈕應(yīng)當(dāng)被形象地分成一組,而不是分散在窗體的四處。對(duì)信息也是一樣,名字字段與地址通常分在一組,因?yàn)樗鼈兟?lián)系緊密。在許多情況下,可以使用框架控件來(lái)幫助加強(qiáng)控件之間的聯(lián)系。

    界面元素的一致性
    在用戶界面設(shè)計(jì)中,一致性是一種優(yōu)點(diǎn)。一致的外觀與感覺(jué)可以在應(yīng)用程序中創(chuàng)造一種和諧,任何東西看上去都那么協(xié)調(diào)。如果界面缺乏一致性,則很可能引起混淆,并使應(yīng)用程序看起來(lái)非常混亂、沒(méi)有條理、價(jià)值降低,甚至可能引起對(duì)應(yīng)用程序可靠性的懷疑。
    為了保持視覺(jué)上的一致性,在開(kāi)始開(kāi)發(fā)應(yīng)用程序之前應(yīng)先創(chuàng)建設(shè)計(jì)策略和類型約定。諸如控件的類型、控件的尺寸、分組的標(biāo)準(zhǔn)以及字體的選取等設(shè)計(jì)元素都應(yīng)該在事先確定。可以創(chuàng)建設(shè)計(jì)樣板來(lái)幫助進(jìn)行設(shè)計(jì)。
    在 Visual Basic 中有大量的控件可供使用,這可能引起有人想使用所有的控件。為了避免這種引誘,選取能很好地適合特定應(yīng)用程序的控件子集。雖然列表框、組合框、網(wǎng)格以及樹(shù)等控件都可用來(lái)表示信息列表,最好還是盡可能使用一種類型。
    還有,盡量恰當(dāng)?shù)厥褂每丶?,雖然 TextBox 控件可以設(shè)置成只讀并用來(lái)顯示文本,但 Label 控件通常更適用于該目的。在為控件設(shè)置屬性時(shí)請(qǐng)保持一致性,如果在一個(gè)地方為可編輯的文本使用白色背景,除非有很好的理由,否則不要在別的地方又使用灰色。
    在應(yīng)用程序中不同的窗體之間保持一致性對(duì)其可用性有非常重要的作用。如果在一個(gè)窗體上使用了灰色背景以及三維效果,而在另一個(gè)窗體上使用白色背景,則這兩個(gè)窗體就顯得毫不相干。選定一種類型并在整個(gè)應(yīng)用程序保持一致,即使這意味著要重新設(shè)計(jì)某些功能。

    動(dòng)感:窗體與其功能匹配
    動(dòng)感是對(duì)象功能的可見(jiàn)線索。雖然對(duì)這個(gè)術(shù)語(yǔ)也許還不熟悉,但動(dòng)感的實(shí)例四處可見(jiàn)。自行車上的把手,手放在它的上面,動(dòng)感會(huì)將把手用手扣緊這件事顯現(xiàn)出來(lái)。按下按鈕、旋轉(zhuǎn)旋鈕和點(diǎn)亮電燈的開(kāi)關(guān)等都能進(jìn)行動(dòng)感表示,一看到它們就可以看出其用處。
    用戶界面也使用動(dòng)感。例如,用在命令按鈕上的三維立體效果使得他們看上去像是被按下去的。如果設(shè)計(jì)平面邊框的命令按鈕的話,就會(huì)失去這種動(dòng)感,因而不能清楚地告訴用戶它是一個(gè)命令按鈕。在有些情況下,平面的按鈕也許是適合的,比如游戲或者多媒體應(yīng)用程序;只要在整個(gè)應(yīng)用程序中保持一致就很好。
    文本框也提供了一種動(dòng)感,用戶可以期望帶有邊框和白色背景的框,框中包含可編輯的文本。顯示不帶邊框的文本框 (BorderStyle = 0) 也有可能,這使它看起來(lái)像一個(gè)標(biāo)簽,并且不能明顯地提示用戶它是可編輯的。

    空白空間的使用
    在用戶界面中使用空白空間有助于突出元素和改善可用性??瞻卓臻g不必非得是白色的——它被認(rèn)為是窗體控件之間以及控件四周的空白區(qū)域。一個(gè)窗體上有太多的控件會(huì)導(dǎo)致界面雜亂無(wú)章,使得尋找一個(gè)字段或者控件非常困難。在設(shè)計(jì)中需要插入空白空間來(lái)突出設(shè)計(jì)元素。
    各控件之間一致的間隔以及垂直與水平方向元素的對(duì)齊也可以使設(shè)計(jì)更可用。就像雜志中的文本那樣,安排得行列整齊、行距一致,整齊的界面也會(huì)使其容易閱讀。
    Visual Basic 提供了幾個(gè)工具,使得控件的間距、排列和尺寸的調(diào)整非常容易。“排列”、“按相同大小制作”、“水平間距”、“垂直間距”和“在窗體中央”等命令都可以在“格式”菜單中找到。

    保持界面的簡(jiǎn)明
    界面設(shè)計(jì)最重要的原則也許就是簡(jiǎn)單化。對(duì)于應(yīng)用程序而言,如果界面看上去很難,則可能程序本身也很難。稍稍深入考慮一下便有助于創(chuàng)建看上去(實(shí)際上也是)用起來(lái)都很簡(jiǎn)單的界面。從美學(xué)的角度來(lái)講,整潔、簡(jiǎn)單明了的設(shè)計(jì)常常更可取。
    在界面設(shè)計(jì)中,一個(gè)普遍易犯的錯(cuò)誤就是力圖用界面來(lái)模仿真實(shí)世界的對(duì)象。例如,想象一下要求創(chuàng)建完整的保險(xiǎn)單的應(yīng)用程序。很自然的反應(yīng)就是在屏幕上設(shè)計(jì)完全仿照保險(xiǎn)單的界面。這樣做會(huì)出現(xiàn)幾個(gè)問(wèn)題:保險(xiǎn)單的形狀與尺寸和屏幕上的有很大不同,要非常完善地復(fù)制這樣的表格會(huì)將其限制在文本框與復(fù)選框中,而對(duì)用戶并沒(méi)有真正的好處。
    最好是設(shè)計(jì)出自己的、也能提供原始保險(xiǎn)單打印副本(帶打印預(yù)覽)的界面。通過(guò)從原始保險(xiǎn)單中創(chuàng)建字段的邏輯組,并使用有標(biāo)簽的界面或幾個(gè)鏈接的窗體,就可以不要求滾動(dòng)屏幕而顯示所有的信息。也可以使用附加的控件,比如帶有選取預(yù)裝入的列表框,這些控件可以減少打字工作量。
    也可以取出不常用的函數(shù)并把它們移到它們自己的窗體中去,來(lái)簡(jiǎn)化許多應(yīng)用程序。提供缺省有時(shí)也可以簡(jiǎn)化應(yīng)用程序;如果十個(gè)用戶中有九個(gè)選取加粗的文本,就把文本粗體設(shè)為缺省值,而不要叫用戶每次都選取一遍(不要忘記提供一個(gè)選項(xiàng)可以覆蓋該缺省值)。向?qū)б灿兄诤?jiǎn)化復(fù)雜的或不常用的任務(wù)。
    簡(jiǎn)化與否最好的檢驗(yàn)就是在應(yīng)用中觀察應(yīng)用程序。如果有代表性的用戶沒(méi)有聯(lián)機(jī)幫助就不能立即完成想要完成的任務(wù),那么就需要重新考慮設(shè)計(jì)了。

    使用顏色與圖像
    在界面上使用顏色可以增加視覺(jué)上的感染力,但是濫用的現(xiàn)象也時(shí)有發(fā)生。許多顯示器能夠顯示幾百萬(wàn)種顏色,這很容易使人要全部使用它們。如果在開(kāi)始設(shè)計(jì)時(shí)沒(méi)有仔細(xì)地考慮,顏色也會(huì)像其他基本設(shè)計(jì)原則一樣,出現(xiàn)許多問(wèn)題。
    每個(gè)人對(duì)顏色的喜愛(ài)有很大的不同,用戶的品味也會(huì)各不相同。顏色能夠引發(fā)強(qiáng)烈的情感,如果正在設(shè)計(jì)針對(duì)全球讀者的程序,那么某些顏色可能有文化上的重大意義。一般說(shuō)來(lái),最好保守傳統(tǒng),采用一些柔和的、更中性化的顏色。
    當(dāng)然,預(yù)期的讀者以及試圖傳達(dá)的語(yǔ)氣與情緒也會(huì)影響對(duì)顏色的選取。明亮的紅色、綠色和黃色適用于小孩子使用的應(yīng)用程序,但是在銀行應(yīng)用程序中它很難帶來(lái)財(cái)務(wù)責(zé)任心。
    少量明亮色彩可以有效地突出或者吸引人們對(duì)重要區(qū)域的注意。作為經(jīng)驗(yàn)之談,應(yīng)當(dāng)盡量限制應(yīng)用程序所用顏色的種類,而且色調(diào)也應(yīng)該保持一致。如果可能的話,最好堅(jiān)持標(biāo)準(zhǔn)的 16 色的調(diào)色板;在 16 色顯示器上觀看時(shí),抖動(dòng)會(huì)使得其他一些顏色顯示不出來(lái)?!   ∈褂妙伾珪r(shí)另一個(gè)需要考慮的問(wèn)題就是色盲。有一些人不能分辨不同的基色(如紅色與綠色)組合之間的差別。對(duì)于有這種情況的人,綠色背景上的紅色文本就會(huì)看不見(jiàn)。

    圖像和圖標(biāo)
    圖片與圖標(biāo)的使用也可以增加應(yīng)用程序的視覺(jué)上的趣味,但是,細(xì)心的設(shè)計(jì)也是必不可少的。不用文本,圖像就可以形象地傳達(dá)信息,但常常不同的人對(duì)圖像的理解也不一樣。
    帶有表示各種功能的圖標(biāo)的工具欄,它是一種很有用的界面設(shè)備,但如果不能很容易地識(shí)別圖標(biāo)所表示的功能,反而會(huì)事與愿違。在設(shè)計(jì)工具欄圖標(biāo)時(shí),應(yīng)查看一下其它的應(yīng)用程序以了解已經(jīng)創(chuàng)建了什么樣的標(biāo)準(zhǔn)。例如,許多應(yīng)用程序用一張角上有卷邊的紙來(lái)表示“新建文件”圖標(biāo)。也許還有更好的比喻來(lái)表示這一功能,但改用其它的表示方法會(huì)引起用戶的混淆。
    考慮圖像文化上的意義也非常重要。許多程序使用田園風(fēng)格的帶一面旗的郵箱(圖 6.21)來(lái)代表郵件功能。這原本是美國(guó)的圖標(biāo);其他國(guó)家/地區(qū)或文化的用戶也許不把它看作郵箱。

    在設(shè)計(jì)自己的圖標(biāo)與圖像時(shí),應(yīng)盡量使它們簡(jiǎn)單。具有多種顏色的復(fù)雜的圖片,作為16×16像素的工具欄圖標(biāo),或者在高分辨率的屏幕上顯示時(shí),都不能很好地適應(yīng)。

    選取字體
    字體也是用戶界面的重要部分,因?yàn)樗鼈兂3=o用戶傳遞重要的信息。需選取在不同的分辨率和不同類型的顯示器上都能容易閱讀的字體。最好盡量堅(jiān)持使用簡(jiǎn)單的無(wú)襯線字體或者襯線字體。通常手寫字體或者其他裝飾性字體的打印效果比屏幕上的效果更好,而且字體越小讀起來(lái)越難。
    除非計(jì)劃按應(yīng)用程序來(lái)配置字體,否則應(yīng)當(dāng)堅(jiān)持使用標(biāo)準(zhǔn) Windows 字體,如 Arial、New Times Roman 或者 System。如果用戶的系統(tǒng)沒(méi)有包含指定的字體,系統(tǒng)會(huì)使用替代的字體,其結(jié)果可能與設(shè)想的完全不一樣。如果正在為國(guó)際讀者設(shè)計(jì),需要調(diào)查在預(yù)想的語(yǔ)言里可用什么字體。還有,在為其他語(yǔ)言設(shè)計(jì)時(shí),需要考慮文本的擴(kuò)展——有些語(yǔ)言的文本串可以多占50% 以上的空間。
    還有,在選取字體時(shí),設(shè)計(jì)的一致性非常重要。大多數(shù)情況下,不應(yīng)當(dāng)在應(yīng)用程序中使用兩種以上字體。太多的字體會(huì)使得應(yīng)用程序看上去像罰款通知單。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多