欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
VB- 用戶(hù)界面
界面樣式

    如果使用過(guò)基于 Windows 的應用程序,也許已經(jīng)注意到不是所有用戶(hù)界面看上去或操作起來(lái)都一樣。用戶(hù)界面樣式主要有兩種:?jiǎn)挝臋n界面 (SDI) 和多文檔界面 (MDI)。SDI 界面的一個(gè)示例就是 Microsoft Windows 中的WordPad(記事本)應用程序(圖 6.1)。在 WordPad 中,只能打開(kāi)一個(gè)文檔,想要打開(kāi)另一個(gè)文檔時(shí),必須先關(guān)上已打開(kāi)的文檔。


    象 Microsoft Excel 和 Microsoft Word for Windows 這樣的應用程序就是MDI 界面;它們允許同時(shí)顯示多個(gè)文檔,每一個(gè)文檔都顯示在自己的窗口中(圖 6.2)。按照是否包含有能在窗口或文檔之間進(jìn)行切換的子菜單的Windows 菜單項,就能識別出 MDI 應用程序。
    要決定哪種界面樣式最好,需要看應用程序的目的。一個(gè)處理保險索賠的應用程序可能要用多文檔界面 MDI 樣式,一個(gè)職員很可能會(huì )同時(shí)處理一個(gè)以上索賠,或者需要對兩個(gè)索賠進(jìn)行比較。另一方面,日歷程序最好設成 SDI(單文檔界面)樣式,因為不大需要同時(shí)打開(kāi)一個(gè)以上日歷;在極少的情況下,可以再打開(kāi)一個(gè)單文檔界面應用程序的實(shí)例。

    SDI 樣式更常用,《程序員指南》中的大多數實(shí)例都采用 SDI 應用程序。關(guān)于創(chuàng )建 MDI 應用程序有一些需要單獨考慮的問(wèn)題和技巧,放在本章后面“多文檔界面 (MDI) 應用程序”一節。
    除了以上兩個(gè)最常用的界面樣式 SDI 與 MDI 外,第三種界面樣式變得越來(lái)越流行,這就是資源管理器樣式的界面(圖 6.3)。資源管理器樣式界面是包括有兩個(gè)窗格或者區域的一個(gè)單獨的窗口, 通常是由左半部分的一個(gè)樹(shù)型的或者層次型的視圖和右半部分的一個(gè)顯示區所組成,如在 MicrosoftWindows 的資源管理器中所見(jiàn)到的那樣。這種樣式的界面可用于定位或瀏覽大量的文檔、圖片或文件?!   〕吮菊滤降?MDI 與 SDI 應用程序示例,實(shí)用程序向導還提供了一種比較界面樣式差別的方法??梢杂孟驅?lái)為每一種樣式生成一個(gè)框架,然后觀(guān)察它生成的窗體與代碼。

    詳細信息 要了解更多的關(guān)于 MDI 應用程序的知識,請參閱“多文檔界面 (MDI) 應用程序”一節。有關(guān)窗體使用的基礎,請參閱第三章“窗體、控件與菜單”。有關(guān)訪(fǎng)問(wèn)實(shí)用程序向導的信息,請參閱第四章“工程的管理”中“使用向導和外接程序”一節。

多文檔界面 (MDI) 應用程序

    多文檔界面 (MDI) 允許創(chuàng )建在單個(gè)容器窗體中包含多個(gè)窗體的應用程序。像Microsoft Excel 與 Microsoft Word for Windows 這樣的應用程序就具有多文檔界面。
    MDI 應用程序允許用戶(hù)同時(shí)顯示多個(gè)文檔,每個(gè)文檔顯示在它自己的窗口中。文檔或子窗口被包含在父窗口中,父窗口為應用程序中所有的子窗口提供工作空間。例如:Microsoft Excel 允許創(chuàng )建并顯示不同樣式的多文檔窗口。每個(gè)子窗口都被限制在 Excel 父窗口的區域之內。當最小化 Excel時(shí),所有的文檔窗口也被最小化,只有父窗口的圖標顯示在任務(wù)欄中。子窗體就是 MDIChild 屬性設置為 True 的普通窗體。一個(gè)應用程序可以包含許多相似或者不同樣式的 MDI 子窗體。
    在運行時(shí),子窗體顯示在 MDI 父窗體工作空間之內(其區域在父窗體邊框以?xún)燃皹祟}與菜單欄之下)。當子窗體最小化時(shí),它的圖標顯示在 MDI 窗體的工作空間之內,而不是在任務(wù)欄中,如圖 6.4 所示。

    注意 一個(gè)應用程序也可以包括標準的、不是包含在 MDI 窗體之內的非MDI 窗體。 MDI 應用程序中標準窗體的典型用法是顯示       模式的對話(huà)框。
    MDI 窗體相似于具有一個(gè)限制條件的普通窗體。除非控件具有 Align 屬性(如 PictureBox 控件)或者具有不可見(jiàn)界面(如 Timer 控件),否則不能將控件直接放置在 MDI 窗體上。

    創(chuàng )建 MDI 應用程序
    使用下列步驟來(lái)創(chuàng )建 MDI 窗體及其子窗體。
    要創(chuàng )建 MDI 應用程序,請按照以下步驟執行:
    1. 創(chuàng )建 MDI 窗體。
    從“工程”菜單中選取“添加 MDI 窗體”。
    注意 一個(gè)應用程序只能有一個(gè) MDI 窗體。如果工程已經(jīng)有了一個(gè) MDI窗體,則該“工程”菜單上的“添加 MDI 窗體”命令就      不可使用。
    2. 創(chuàng )建應用程序的子窗體。
     要創(chuàng )建一個(gè) MDI 子窗體,先創(chuàng )建一個(gè)新窗體(或者打開(kāi)一個(gè)存在的窗體),然后把它的 MDIChild 屬性設為 True。

    設計時(shí)使用 MDI 子窗體
    在設計時(shí),子窗體不是限制在 MDI 窗體區域之內??梢蕴砑涌丶?、設置屬性、編寫(xiě)代碼以及設計子窗體功能,就像在其它 Visual Basic 窗體中做的那樣。
    通過(guò)查看 MDIChild 屬性或者檢查工程資源管理器,可以確定窗體是否是一個(gè) MDI 子窗體。如果該窗體的 MDIChild 屬性設置為 True,則它是一個(gè)子窗體。Visual Basic 在“工程資源管理器”中為 MDI 窗體與 MDI 子窗體顯示了特定的圖標,如圖 6.5 所示。

          圖 6.5 工程資源管理器中的圖標標明 MDI 子窗體、標準窗體和 MDI 窗體

    MDI 窗體運行時(shí)的特性
    在運行時(shí),MDI 窗體及其所有的子窗體都呈現特定的性質(zhì):
    1.所有子窗體均顯示在 MDI 窗體的工作空間內。像其它的窗體一樣,用戶(hù)能移動(dòng)子窗體和改變子窗體的大小,不過(guò),它們被限     制于這一工作空間內。
    2.當最小化一個(gè)子窗體時(shí),它的圖標將顯示于 MDI 窗體上而不是在任務(wù)欄中。當最小化 MDI 窗體時(shí),此 MDI 窗體及其所有子     窗體將由一個(gè)圖標來(lái)代表。當還原 MDI 窗體時(shí),MDI 窗體及其所有子窗體將按最小化之前的狀態(tài)顯示出來(lái)。
    3.當最大化一個(gè)子窗體時(shí),它的標題會(huì )與 MDI 窗體的標題組合在一起并顯示于 MDI 窗體的標題欄上(參見(jiàn)圖 6.6)。

    4.通過(guò)設定 AutoShowChildren 屬性,子窗體可以在窗體加載時(shí)自動(dòng)顯示(True) 或自動(dòng)隱藏 (False)。
    5.活動(dòng)子窗體的菜單(若有)將顯示在 MDI 窗體的菜單欄中,而不是顯示在子窗體中。
MDI NotePad 應用程序
    MDI NotePad 示例應用程序是一個(gè)簡(jiǎn)單的文本編輯器,它與 MicrosoftWindows 中包含的 NotePad 應用程序相似。不過(guò),MDI NotePad 應用程序使用的是一個(gè)多文檔界面 (MDI)。在運行時(shí),若用戶(hù)需要一個(gè)新文檔(用該應用程序的“文件”菜單中的“新建”命令執行),應用程序就會(huì )創(chuàng )建子窗體的一個(gè)新實(shí)例。這就允許按其所需創(chuàng )建多個(gè)子窗體或文檔。
    在 Visual Basic 中為了創(chuàng )建以文檔為中心的應用程序,至少需要兩個(gè)窗體:一個(gè) MDI 窗體和一個(gè)子窗體。設計時(shí),應創(chuàng )建一個(gè) MDI 窗體以容納該應用程序,再創(chuàng )建一個(gè)子窗體作為這個(gè)應用程序文檔的模板。
    要創(chuàng )建自己的 MDI NotePad 應用程序,請按照以下步驟執行:
    1. 從“文件”菜單中,選取“新建工程”命令。
    2. 從“工程”菜單中,選取“添加 MDI 窗體”命令來(lái)創(chuàng )建容器窗體?,F在,這個(gè)工程應當包含一個(gè) MDI 窗體 (MDIForm1) 和     一個(gè)標準窗體(Form1)。
    3. 在 Form1 上創(chuàng )建一個(gè)文本框 (Text1)。
    4. 按下列方式為兩個(gè)窗體和文本框設置屬性。

    6. 在 mnuFileNew_Click 過(guò)程中增加以下代碼:
    Private Sub mnuFileNew_Click ()
      ' 創(chuàng )建名為 NewDoc 的窗體 Form1 的一個(gè)新實(shí)例。
      Dim NewDoc As New Form1
      ' 顯示此新窗體。
      NewDoc.Show
    End Sub
    這個(gè)過(guò)程創(chuàng )建并顯示 Form1 的名為 NewDoc 的一個(gè)新實(shí)例(或其副本)。每當從“文件”菜單中選取“新建”命令時(shí),將會(huì )創(chuàng )建一個(gè)與 Form1完全相同的副本(實(shí)例),它包含 Form1 所包含的所有控件和代碼。
    7. 給 Form1 窗體的 Form_Resize 過(guò)程添加以下代碼:
     Private Sub Form_Resize()
        ' 擴展文本框以放置當前子窗體。
        Text1.Height = ScaleHeight
        Text1.Width = ScaleWidth
     End Sub
    Form_Resize 事件過(guò)程的代碼,像Form1 中的所有代碼一樣,能為 Form1的每一個(gè)實(shí)例所共享。當顯示窗體的幾個(gè)副本時(shí),每個(gè)窗體都能識別各自的事件。當一個(gè)事件出現時(shí),該事件過(guò)程的代碼就會(huì )被調用。由于相同的代碼為每個(gè)實(shí)例所共享,關(guān)于調用該代碼的窗體是如何引用的,尤其是每個(gè)實(shí)例都具有相同的名字 (Form1) 時(shí)。這個(gè)問(wèn)題將在本章后面的“使用 MDI 窗體及其子窗體”一節中討論?!   ?. 按 F5 鍵可運行該應用程序。
    提示 除了本章提到的以外,Mdinote.vbp 示例應用程序還包含許多 MDI技巧?;ㄒ恍r(shí)間對該示例代碼進(jìn)行全面研究會(huì )找到這些技巧。Sdinote.vbp 示例應用程序是同一應用程序轉換為 SDI 樣式的實(shí)現;比較這兩個(gè)例子可以明白 MDI 和 SDI 技巧的差別。

    使用 MDI 窗體及其子窗體
    當 MDI 應用程序在一次會(huì )話(huà)中要打開(kāi)、保存和關(guān)閉幾個(gè)子窗體時(shí),應當能夠引用活動(dòng)窗體和保持關(guān)于子窗體的狀態(tài)信息。這個(gè)主題描述了一些用來(lái)指定活動(dòng)子窗體或者控件、加載和卸載 MDI 窗體及其子窗體、以及保持子窗體的狀態(tài)信息的編碼技巧。

    指定活動(dòng)子窗體或控件
    有時(shí)要提供一條命令,它用于對當前活動(dòng)子窗體上具有焦點(diǎn)的控件進(jìn)行操作。例如,假設想從子窗體的文本框中把所選文本復制到剪貼板上。在Mdinote.vbp 示例應用程序中,“編輯”菜單上的“復制”項的 Click 事件將會(huì )調用 EditCopyProc,它是把選定的文本復制到剪貼板上的過(guò)程。
    由于應用程序可以有同一子窗體的許多實(shí)例,EditCopyProc 需要知道使用的是哪一個(gè)窗體。為了指定這一點(diǎn),使用 MDI 窗體的 ActiveForm 屬性,該屬性可以返回具有焦點(diǎn)的或者最后被激活的子窗體。
    注意 當訪(fǎng)問(wèn) ActiveForm 屬性時(shí),至少應有一個(gè) MDI 子窗體被加載或可見(jiàn),否則會(huì )返回一個(gè)錯誤。
    當一個(gè)窗體中有幾個(gè)控件時(shí),也需要指定哪個(gè)控件是活動(dòng)的。像 ActiveForm屬性一樣,ActiveControl 屬性能返回活動(dòng)子窗體上具有焦點(diǎn)的控件。下邊是副本例程的示例,從子窗體菜單、MDI 窗體菜單或者是工具欄按鈕上可對它進(jìn)行調用。
    Private Sub EditCopyProc ()
      ' 將選定文本復制到剪貼板上。
      ClipBoard.SetText _
        frmMDI.ActiveForm.ActiveControl.SelText
    End Sub
    假如,正在編寫(xiě)被多個(gè)窗體實(shí)例調用的代碼,不用窗體標識符訪(fǎng)問(wèn)窗體的控件或屬性是一個(gè)好辦法。例如,用 Text1.Height 引用 Form1上文本框的高度,而不是使用 Form1.Text1.Height。這樣,該代碼總是影響當前窗體。
    在代碼中指定當前窗體的另一種方法是用 Me 關(guān)鍵字。用 Me 關(guān)鍵字來(lái)引用當前其代碼正在運行的窗體。當需要把當前窗體實(shí)例的引用參數傳遞給過(guò)程時(shí),這個(gè)關(guān)鍵字很有用。
    詳細信息 有關(guān)通過(guò) Dim 語(yǔ)句用 New 關(guān)鍵字來(lái)創(chuàng )建多個(gè)窗體實(shí)例的信息,請參閱第五章“編程基礎”中的“變量、常數和數據類(lèi)型概述”,以及《語(yǔ)言參考》的“Dim 語(yǔ)句”。有關(guān)通過(guò) Dim 語(yǔ)句用 New 關(guān)鍵字來(lái)創(chuàng )建多個(gè)窗體實(shí)例的信息,請參閱“編程基礎”中的“變量、常數和數據類(lèi)型概述”,和《語(yǔ)言參考》的“Dim 語(yǔ)句”。

    加載 MDI 窗體及其子窗體
    加載子窗體時(shí),其父窗體(MDI 窗體)會(huì )自動(dòng)加載并顯示。而加載 MDI 窗體時(shí),其子窗體并不會(huì )自動(dòng)加載。
    在 MDI NotePad 示例中,子窗體是缺省的啟動(dòng)窗體,因而在程序運行時(shí),子窗體和 MDI 窗體兩者都會(huì )加載。如果在 MDI NotePad 應用程序中改變啟動(dòng)窗體為 frmMDI(在“工程屬性”的“一般”選項卡上),然后運行應用程序,則只有 MDI 窗體被加載。當從“文件”菜單中選取“新建”命令時(shí),才會(huì )加載第一個(gè)子窗體。
    AutoShowChildren 屬性可用來(lái)加載隱藏狀態(tài)的 MDI 子窗口,使它們處于隱藏狀態(tài)直至用 Show 方法把它們顯示出來(lái)。這就允許在子窗體變成可見(jiàn)之前更新標題、位置和菜單等各種細節。
    不能把 MDI 子窗體或者 MDI 窗體顯示為模式窗體(用帶 vbModal 參數的 Show 方法)。如果想在 MDI 應用程序中使用模式對話(huà)框,可使用MDIChild 屬性設置為 False 的窗體。

    設置子窗體的大小和位置
    如果 MDI 子窗體具有大小可變的邊框〔即 BorderStyle = 2),在其裝載時(shí),Microsoft Windows 將決定其初始的高度、寬度和位置。邊框大小可變的子窗體,其初始大小與位置取決于 MDI 窗體的大小,而不是設計時(shí)子窗體的大小。當 MDI 子窗體的邊框大小不可變(即 BorderStyle = 0,1 或 3)時(shí),則它將用設計時(shí)的 Height 和 Width 屬性被載入。
    如果設置 AutoShowChildren 為 False,則在 MDI 子窗體載入以后,把它設為可見(jiàn)狀態(tài)之前,可以改變其位置。
    詳細信息 請參閱《語(yǔ)言參考》的“AutoShowChildren 屬性”和“ Show 方法”。

    維護子窗體的狀態(tài)信息
    在用戶(hù)決定退出 MDI 應用程序時(shí),必須有保存信息的機會(huì )。為了使其能夠進(jìn)行,應用程序必須隨時(shí)都能確定自上次保存以來(lái)子窗體中的數據是否有改變。
    通過(guò)在每個(gè)子窗體中聲明一個(gè)公用變量來(lái)實(shí)現此功能。例如,可以在子窗體的聲明部分聲明一個(gè)變量:
    Public boolDirty As Boolean
    Text1 中的文本每改變一次時(shí),子窗體文本框的 Change 事件就會(huì )將boolDirty 設置為 True??商砑哟舜a以指示自上次保存以來(lái) Text1 的內容已經(jīng)改變。
    Private Sub Text1_Change ()
       boolDirty = True
    End Sub
    反之,用戶(hù)每次保存子窗體的內容時(shí),文本框的 Change 事件就將 boolDirty設置為 False,以指示 Text1 的內容不再需要保存。在下列代碼中,假設有一個(gè)叫做“保存”(mnuFileSave) 的菜單命令和一個(gè)用來(lái)保存文本框內容的名為 FileSave 的過(guò)程:
    Sub mnuFileSave_Click ()
        '保存 Text1 的內容。
        FileSave
        '設置狀態(tài)變量。
        boolDirty = False
    End Sub

    用 QueryUnload 卸載 MDI 窗體
    當用戶(hù)決定退出應用程序時(shí),boolDirty 標志就很有用了。當用戶(hù)從 MDI 窗體的“控制”菜單中選取“關(guān)閉”,或者從提供的菜單項,例如“文件”菜單上的“退出”命令,上述情況就會(huì )出現。如果用戶(hù)使用 MDI 窗體的“控制”菜單來(lái)關(guān)閉應用程序,Visual Basic 將試圖卸載 MDI 窗體。
    當 MDI 窗體被卸載時(shí),QueryUnload 事件首先為 MDI 窗體調用,然后再為每一個(gè)打開(kāi)的子窗體調用。如果在這些 QueryUnload 事件過(guò)程中沒(méi)有代碼,則取消 Unload 事件,然后,每一個(gè)子窗體被卸載,最后,MDI 窗體被卸載。
    由于 QueryUnload 事件在窗體卸載之前被調用,因此在窗體卸載前可以給用戶(hù)一個(gè)機會(huì )來(lái)保存窗體。下述代碼使用 boolDirty 標志來(lái)決定是否要提醒用戶(hù)在子窗體卸載之前進(jìn)行保存。請注意,可以在工程的任何地方訪(fǎng)問(wèn)公共窗體級變量值。這個(gè)代碼假定有一個(gè)名叫 FileSave 的過(guò)程,它將 Text1的內容保存到一個(gè)文件中。
    Private Sub mnuFExit_Click()
        '當用戶(hù)在 MDI 應用程序中選取“文件提出”命令時(shí),卸載
        'MDI 窗體,為每個(gè)打開(kāi)的子窗體調用 QueryUnload 事件。
        Unload frmMDI
        End
    End Sub
    Private Sub Form_QueryUnload(Cancel As Integer, _
        UnloadMode As Integer)
        If boolDirty Then
        '調用例程來(lái)詢(xún)問(wèn)用戶(hù)且必要時(shí)保存文件。
        FileSave
        End If
    End Sub
    詳細信息 請參閱《語(yǔ)言參考》的“QueryUnload 事件”。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
《Visual Basic語(yǔ)言程序設計基礎(第3版)》第8章 窗體
C# winForm
多文檔窗體和控件布局
VB編程基礎教程17–創(chuàng )建對象 | 異次元軟件世界
在MDI應用程序中如何判斷一個(gè)子窗體已經(jīng)打開(kāi)
Delphi – 在DLL中保存并創(chuàng )建MDI子窗體
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久