版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第8章 菜單的設計和MDI程序設計 第8章 菜單的設計和MDI程序設計 8.1 菜單的設計菜單的設計 8.2 多文檔界面多文檔界面(MDI) 8.3 工具欄工具欄 8.4 對話框對話框 習題八習題八 第8章 菜單的設計和MDI程序設計 8.1 菜菜 單單 的的 設設 計計 1菜單編輯器窗口的用法菜單編輯器窗口的用法 菜單編輯器主要分為三個部分:菜單按鍵屬性區(qū)、編輯區(qū)和菜單顯示區(qū)。下面詳細介紹菜單編輯器的各部分功能。 (1) “標題(Caption)”文本框,讓用戶鍵入顯示在窗體上的菜單標題,鍵入的內容會在菜單編輯器窗口的下邊空白部分顯示出來,該區(qū)域稱為菜單顯示區(qū)域。如果輸入時在菜單標題的某個字
2、母前輸入一個符號,那么該字母就成了熱鍵字母,在窗體上顯示時該字母有下劃線,操作時同時按Alt和該帶有下劃線的字母就可選擇這個菜單項命令。例如,建立文件菜單File在“標題”文本框內應輸AFile, 程序執(zhí)行時用AltF就可以選擇File菜單。第8章 菜單的設計和MDI程序設計 (2) “名稱(Name)”文本框,由用戶輸入菜單項的名稱,它不會顯示出來,在程序中用來標識該菜單項。在“標題”文本框中輸入了一個菜單標題,在“名稱”文本框中應有一個對應的菜單名稱。分界符也要有對應的名稱。 (3) “快捷鍵(Shortcut Key)”下拉列表框,列出了很多快捷鍵,供用戶為菜單項選擇一個快捷鍵。菜單項的
3、快捷鍵可以不要,但如果選擇了快捷鍵,則會顯示在菜單標題的右邊。在程序運行時,用戶按快捷鍵同樣可完成選擇該菜單項并執(zhí)行相應命令的操作。 (4) “下一個(Next)”按鈕,當用戶把一個菜單項的各個屬性設置完以后,選擇此按鈕,即可換行設置下一個菜單項。 第8章 菜單的設計和MDI程序設計 (5) “”和“”按鈕,菜單層次的選擇按鈕。若建立好一個菜單項后按“”按鈕,則該菜單項在顯示框中向右移一段,前面加“.”表示該菜單項為下一級的菜單項。如果選定了某菜單項后,再按“”按鈕,前面的省略號將取消,表示該菜單項是上一級的菜單項。 (6) “插入(Insert)”按鈕,在選定的菜單項前插入一個菜單項。 (7
4、) “刪除(Delete)”按鈕,刪除選定的菜單項。 (8) “”和“”按鈕,用于改變菜單項排列的位置。 (9) “復選(Checked)”檢查框,如果在顯示框中選定了某個菜單項,再選定“Checked”檢查框,那么當前被選定的菜單項左邊加上了一個檢查標記“”,表示該菜單項是一個被選項。 第8章 菜單的設計和MDI程序設計 (10) “有效(Enabled)”檢查框,該檢查框決定菜單項是否可選(有效)。當該檢查框被選中,表示菜單項的Enabled屬性為True,程序執(zhí)行時菜單項高亮度顯示,是可選的;如果沒有被選中,即Enabled屬性為False,在程序執(zhí)行時該菜單項變成灰色,不能被用戶選擇。
5、 (11) “可見(Visible)”檢查框,該檢查框決定菜單項是否可見。若該檢查框未被選中,表示該菜單項的Visible屬性為False,程序執(zhí)行時不可見。 第8章 菜單的設計和MDI程序設計 (12) “協(xié)調位置(Negotiate Position)”下拉列表框,通過這一下拉列表框,可以確定菜單或菜單項在窗體中是否出現(xiàn)或怎樣出現(xiàn)。下拉列表框中共有4個選項。0None:菜單項不顯示;1Left:菜單項左顯示;2Middle:菜單項中顯示;3Right:菜單項右顯示。第8章 菜單的設計和MDI程序設計 (13) “幫助上下文ID(Help Context ID)”文本框,可以通過鍵入一個數(shù)值
6、,在幫助文件(用HelpFile屬性設置)中查找相應的幫助主題。 (14) “顯示窗口列表(Window List)”檢查框,決定菜單控件上是否顯示所打開的子窗體標題。該檢查框僅對MDI窗體和MDI子窗體有效,對普通窗體無效。 第8章 菜單的設計和MDI程序設計 2單設計過程單設計過程 建立菜單大致可分成三個步驟: (1) 建立控件。 (2) 設計菜單。在窗口上的控件建立以后,我們就設計菜單。在設計狀態(tài)下選擇“工具”菜單下的菜單編輯器(CtrlE)命令,出現(xiàn)“菜單設計”窗口。在“菜單設計”窗口中,對每一個菜單項輸入標題、控件名稱和相應的快捷鍵。當完成所有輸入工作后,選擇“確定”按鈕,就完成了整
7、個菜單的設計工作。 (3) 建立事件過程代碼。在菜單建立好以后,還需要相應的事件過程。 第8章 菜單的設計和MDI程序設計 3單項的動態(tài)增減單項的動態(tài)增減 應用程序的菜單應設計成像Windows程序管理器中Window菜單一樣,能夠在執(zhí)行時隨著程序的變化動態(tài)地增減菜單中的菜單項。菜單項增減是利用控件數(shù)組來實現(xiàn)的。 【例8-1】 下面以一個簡單的實例來說明菜單設計的步驟。我們以前面設計的菜單為基礎,增加菜單項增減功能。當用戶在窗體上單擊時,在“計算2”菜單中增加“平方和”和“立方和”兩條命令。當用戶在窗體上雙擊時,在“計算2”菜單中刪除這兩個命令。 第8章 菜單的設計和MDI程序設計 (1) 在
8、菜單設計窗口中,按表8.1輸入各菜單項的標題、控件名稱和快捷鍵。另外,菜單項Namearray的Index屬性設為0,Visible屬性設為False(不可見)。 表表8.1 菜單項的屬性設置菜單項的屬性設置 菜 單 項 名 稱 快 捷 鍵 計算 1 Cal1 空白 加法 Add CtrlA 減法 Sub CtrlD 計算 2 Cal2 空白 乘法 Div CtrlC 除法 Mul CtrlD 清除 Clean CtrlE Namearray 空白 第8章 菜單的設計和MDI程序設計 (2) 窗體設計界面如圖8.1所示。 圖8.1 設計界面 第8章 菜單的設計和MDI程序設計 (3) 在菜單建
9、立好以后,編寫下列事件過程。Dim iMenucount As Integer 該變量須在窗體層說明 菜單項Add的單擊事件Private Sub Add_Click( ) X = Val(txtNo1.Text) + Val(txtNo2.Text) lblDisplayResult.Caption = Str$(X)End Sub 第8章 菜單的設計和MDI程序設計 表單單擊事件裝入新菜單項Private Sub Form_Click( )If iMenucount = 0 Then iMenucount = iMenucount + 1 Load Namearray(iMenucount
10、) 裝入新菜單項 Namearray(iMenucount).Caption = 平方和 Namearray(iMenucount).Visible = True iMenucount = iMenucount + 1 Load Namearray(iMenucount) 裝入新菜單項 Namearray(iMenucount).Caption = 立方和 Namearray(iMenucount).Visible = TrueEnd IfEnd Sub 第8章 菜單的設計和MDI程序設計 表單雙擊事件刪除裝入的菜單項Private Sub Form_DblClick( )Dim i As I
11、nteger Do While iMenucount 0 Unload Namearray(iMenucount) 刪除菜單 iMenucount = iMenucount - 1LoopEnd Sub 第8章 菜單的設計和MDI程序設計 Namearray_Click是這些新增菜單項的共用事件過程。當用戶選擇“平方和”命令時,參數(shù)Index的值是1,選擇“立方和”命令時,Index的值是2。 Private Sub Namearray_Click(Index As Integer) X = Val(txtNo1.Text) (Index + 1) + Val(txtNo2.Text) (In
12、dex + 1) lblDisplayResult.Caption = Str$(X) End Sub 第8章 菜單的設計和MDI程序設計 (4) 運算結果如圖8.2所示 圖8.2 菜單示例運行結果 第8章 菜單的設計和MDI程序設計 4彈出菜單彈出菜單 Visual Basic允許出現(xiàn)快捷菜單,這為用戶提供了很大的方便。一般來說,菜單都在窗口的頂部。有時用戶需要執(zhí)行菜單中的某一命令,就得把鼠標指針移到窗口頂部打開菜單,再選擇命令,這對用戶來說,會覺得很麻煩。而快捷菜單并不需要到窗口頂部來打開,只要單擊鼠標的右鍵就會彈出。 設計快捷菜單仍然使用Visual Basic提供的菜單編輯器,只要把某
13、個菜單設置成隱藏Visible屬性為False就可以了。實際上,不管是在窗口頂部菜單條上顯示的菜單,還是隱藏的菜單,都可以用PopupMenu方法把它們作為快捷菜單在程序運行期間顯示出來。 第8章 菜單的設計和MDI程序設計 PopupMenu方法的使用形式如下: 對象. PopupMenu 菜單名,標志,x,y 說明: (1) x,y是快捷菜單顯示的位置。 (2) 標志指定快捷菜單的行為。當標志為0時,快捷菜單中的項只能對鼠標左鍵有反應。當標志為2時,快捷菜單中的項對鼠標左鍵和右鍵都有反應。標志為2時PopupMenu方法只能用在MouseDown事件過程。 第8章 菜單的設計和MDI程序設
14、計 【例8-2】 我們讓前面設計的“計算2”菜單,在程序運行時作為快捷菜單顯示出來。 首先,按前面介紹的方法設計“計算2”菜單。其Visible屬性可以設置成True或False。然后,編寫如下的事件過程: Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu Cal1, 2 End If End Sub程序運行后,單擊鼠標右鍵(Button=2),立即彈出Call菜單,如圖8.3 所示。 第8章 菜單的設計和M
15、DI程序設計 圖8.3 彈出菜單的顯示 一般來說,用戶應將經(jīng)常使用的命令如Close、Clear命令組成一個快捷菜單,以便于使用。第8章 菜單的設計和MDI程序設計 8.2 多文檔界面多文檔界面(MDI) 8.2.1 創(chuàng)建創(chuàng)建MDI窗體及其子窗體窗體及其子窗體 1創(chuàng)建創(chuàng)建MDI窗體窗體 用戶要建立一個MDI窗體,可以選擇“工程”菜單中的“添加MDI窗體”命令,在彈出的“添加MDI窗體”對話框中,選擇“MDI窗體”,再選擇“打開”按鈕。需要注意的是,一個應用程序只能有一個MDI窗體,但是可以有多個MDI子窗體。如果MDI子窗體有菜單,那么,當MDI子窗體為活動窗體時,子窗體的菜單將自動取代MDI
16、窗體的菜單。 第8章 菜單的設計和MDI程序設計 2MDI窗體上控件的設置窗體上控件的設置 為了把其它的控件放入MDI窗體,應該先在MDI窗體上繪制一個PictureBox圖片框,然后在圖片框中繪制其它控件??梢栽贛DI窗體的圖片框中使用Print方法顯示文本,但是不能在MDI窗體上顯示文本。 第8章 菜單的設計和MDI程序設計 3子窗體子窗體 MDI子窗體是一個MDIChild屬性為True的普通窗體。因此,要創(chuàng)建一個MDI子窗體,應先創(chuàng)建一個新的普通窗體,然后將它的MDIChild屬性置為True。MDI子窗體的設計與MDI窗體無關,但在運行時總是包含在MDIForm中。 第8章 菜單的設
17、計和MDI程序設計 【例8-3】 建立多文檔界面。 首先用“工程”菜單中的“添加MDI窗體”和“添加窗體”命令建立一個MDI窗體和兩個普通窗體設置。 MDI窗體上有一個“窗體”菜單,其中有三個命令:窗口、子窗體1(Show_frmMDIChild1)和子窗體2(Show_frmMDIChild2),后二者分別用于顯示子窗體1和子窗體2。菜單窗口下面實現(xiàn)了三個功能:層疊、平鋪和排列圖標。MDI窗體如圖8.4所示。 第8章 菜單的設計和MDI程序設計 圖8.4 MDI窗體界面設計 第8章 菜單的設計和MDI程序設計 8.2.2 顯示顯示MDI窗體及其子窗體窗體及其子窗體 顯示MDI窗體及其子窗體的
18、方法是Show,下面的程序中前兩個菜單項的代碼過程就是用Show顯示子窗體。 菜單項子窗體1響應事件Private Sub Show_frmMDIChild1_Click( )frmMDIChild1.ShowEnd Sub 菜單項子窗體2響應事件Private Sub Show_frmMDIChild2_Click( )frmMDIChild2.ShowEnd Sub 第8章 菜單的設計和MDI程序設計 子菜單項層疊事件編寫Private Sub mnuWindowTile_Click( )frmMDI.Arrange vbTileHorizontalEnd Sub 子菜單項平鋪事件編寫Pr
19、ivate Sub mnuWindowArrange_Click( )frmMDI.Arrange vbArrangeIconEnd Sub 子菜單項排列圖標事件編寫Private Sub mnuWindowsCascade_Click( )frmMDI.Arrange vbCasecadeEnd Sub子窗體1、2同時顯示時執(zhí)行結果如圖8.5所示。 第8章 菜單的設計和MDI程序設計 圖8.5 MDI窗體顯示結果 第8章 菜單的設計和MDI程序設計 不能把MDI子窗體或者MDI窗體顯示為模式窗體(用帶vbModal參數(shù)的Show方法)。如果想在MDI應用程序中使用模式對話框,則該對話框(一種
20、特殊窗體)的MDIChild屬性必須設置為False。 加載子窗體時,其父窗體(MDI窗體)會自動加載并顯示,而加載MDI窗體時,其子窗體并不會自動加載。 在上述例子中,如果子窗體1是缺省的啟動窗體,則在程序運行時,子窗體1和MDI窗體兩者都會加載。如果改變啟動窗體為MDI窗體,然后運行應用程序,則只有MDI窗體被加載。當從“窗體”菜單中選擇“子窗體1”或“子窗體2”命令時,才會加載子窗體。 第8章 菜單的設計和MDI程序設計 MDI窗體有AutoShowChildren屬性,它決定是否自動顯示子窗體。如果它被設置為True,則當改變子窗體的屬性(如Caption等)后,會自動顯示該子窗體,不
21、再需要Show方法;如果設置AutoShowChildren為False,則改變子窗體的屬性值后,不會自動顯示該子窗體,子窗體處于隱藏狀態(tài)直至用Show方法把它們顯示出來。MDI子窗體沒有AutoShow-Children屬性。 例如,修改Show frmMDIChild2_Click事件過程,使其當把子窗體2的Top屬性設置為100時,可自動顯示子窗體2。Sub Show_frmMDIChild2_Click( ) frmMDI.AutoShowChildren=True frmMDIChild2.Top=100End Sub 第8章 菜單的設計和MDI程序設計 如果MDI子窗體具有大小可變
22、的邊框(即BorderStyle2),在其顯示時,Windows將決定其初始的高度、寬度和位置。邊框大小可變的子窗體,其初始大小與位置取決于MDI窗體的大小,而不是設計時子窗體的大??;當MDI子窗體的邊框大小不可變 (即BorderStyle=0,1或3)時,則它的大小由設計時的Height和Width屬性決定。 與卸載普通窗體一樣,卸載MDI窗體及其子窗體也是使用Unload語句。例如,如果要卸載frmMDIChild1,則應該使用Unload frmMDIChild1語句。 第8章 菜單的設計和MDI程序設計 8.2.3 維護子窗體的狀態(tài)信息維護子窗體的狀態(tài)信息 在用戶決定退出MDI應用程
23、序時,必須有保存信息的機會。為此,應用程序必須隨時都能確定自上次保存以來子窗體中的數(shù)據(jù)是否有所改變。 通過在每個子窗體中聲明一個公用變量來實現(xiàn)保存信息的功能。例如,可以在子窗體的聲明部分聲明一個變量: Public boolDirty As Boolean 假定子窗體1中有一個文本框Text1,Text1中的文本每一次改變時,文本框的Change事件就會將boolDirty設置為True??商砑右恍写a以指示自上次保存以來Text1的內容已經(jīng)改變。 第8章 菜單的設計和MDI程序設計 Sub Text1_Change( ) boolDirty =TrueEnd Sub 反之,用戶每次保存子窗體
24、的內容時,都將boolDirty設置為False,以指示Text1的內容不再需要保存。在下列代碼中,假設有一個叫做“保存”(mnuFileSave)的菜單命令和一個用來保存文本框內容的名為FileSave的過程: 第8章 菜單的設計和MDI程序設計 Sub mnuFileSave_Click( ) 保存Text1的內容 FileSave 設置狀態(tài)變量 BoolDirty =FalseEnd Sub第8章 菜單的設計和MDI程序設計 8.2.4 用用QueryUnload卸載卸載MDI窗體窗體 當用戶決定退出應用程序時,boolDirty標志就很有用了。當用戶從MDI窗體的控制菜單框中選擇“關閉
25、”命令,或者選擇提供的菜單項,例如“文件”菜單上的“退出”命令時,上述情況就會出現(xiàn)。如果用戶使用MDI窗體的“控制”菜單來關閉應用程序,Visual Basic將試圖卸載MDI窗體。 當MDI窗體被卸載時,MDI窗體首先觸發(fā)QueryUnload事件,然后每一個打開的子窗體也都觸發(fā)該事件。如果在這些QueryUnload事件過程中沒有代碼,則取消QueryUuload事件,然后,每一個子窗體被卸載,最后,MDI窗體被卸載。 第8章 菜單的設計和MDI程序設計 由于QueryUnload事件在窗體卸載之前被觸發(fā),因此在窗體卸載前給用戶一個機會來保存窗體。下述代碼使用boolDirty標志來決定是
26、否要提醒用戶在子窗體卸載之前進行保存。請注意,可以在工程的任何地方訪問公共窗體級變量值。下面的代碼假定有一個名叫FileSave的過程,它將Text1的內容保存到一個文件中。代碼如下: 第8章 菜單的設計和MDI程序設計 Sub mnuExit_Click( ) 當用戶在MDI應用程序中選取文件退出命令時,卸載 MDI窗體,為每個打開的子窗體觸發(fā)QueryUnload事件 Unload frmMDI EndEnd SubSub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If boolDirty Then 調用例程來詢問
27、用戶且必要時保存文件 FileSave End IfEnd Sub 第8章 菜單的設計和MDI程序設計 8.2.5 多文檔界面應用程序中的多文檔界面應用程序中的“窗口窗口”菜單菜單 大多數(shù)MDI應用程序都有“窗口”菜單。在“窗口”菜單上顯示了所有打開的子窗體標題,另外還有層疊、平鋪和排列圖標命令。 在Visual Basic中,如果要在某個菜單上顯示所有打開的子窗體標題,只需利用菜單編輯器將該菜單的WindowList屬性設置為True,即選中顯示窗口列表檢查框。 對于窗體或子窗體圖標的層疊、平鋪和排列圖標命令通常也放在“窗口”菜單上,是用Arrange方法來實現(xiàn)的,下面是這三個菜單命令的事件
28、過程。 假定MDI窗體名稱為frmMDI,層疊、平鋪和排列圖標菜單項的名稱分別為mnuWindow-Cascade、mnuWindowTile和mnuWindowArrange。 第8章 菜單的設計和MDI程序設計 vbCascade、vbTileHorizontal和vbArrangeIcons是Visual Basic的三個內部常數(shù)。 Sub mnuWindowCascade_Click( ) 層疊子窗體 frmMDI.Arrange vbCascadeEnd SubSub mnuWindowTile_Click( ) 平鋪子窗體 frmMDI.Arrange vbTileHorizont
29、alEnd SubSub mnuWindowArrange_Click( ) 對任何已經(jīng)最小化的子窗體排列圖標 frmMDI.Arrange vbArrangeIconEnd Sub 第8章 菜單的設計和MDI程序設計 8.2.6 應用舉例應用舉例創(chuàng)建一個創(chuàng)建一個MDI NotePad MDI NotePad是一個多文檔界面(MDI)。在運行時,若用戶需要一個新文檔,就使用應用程序的“文件”菜單中的“新建”命令,應用程序會創(chuàng)建子窗體的一個新實例。這就允許按其所需創(chuàng)建多個子窗體或文檔。 為了創(chuàng)建以文檔為中心的應用程序,至少需要兩個窗體:一個MDI窗體和一個子窗體。設計時,應創(chuàng)建一個MDI窗體以容
30、納該應用程序,再創(chuàng)建一個子窗體作為這個應用程序文檔的模板。操作步驟如下: 第8章 菜單的設計和MDI程序設計 (1) 從“文件”菜單中選取“新建工程”命令。 (2) 從“工程”菜單中,選取“添加MDI窗體”命令來創(chuàng)建容器窗體?,F(xiàn)在,這個工程應當包含一個MDI窗體(MDIForm1)和一個標準窗體(Form1)。 (3) 在Form1上創(chuàng)建一個文本框(Text1)。 (4) 按表8.2設置兩個窗體和文本框的屬性。 第8章 菜單的設計和MDI程序設計 表表8.2 MDI窗體、窗體、MDI子窗體和文本框屬性子窗體和文本框屬性 對 象 屬 性 設 置 值 MDIForm1 Caption MDI No
31、tepad Form1 Caption MDIChild 無標題 True Text1 MultiLine Text Left Top True (空值) 0 0 第8章 菜單的設計和MDI程序設計 (5) 使用菜單編輯器,按表8.3為MDIForm1創(chuàng)建一個“文件”菜單。 表表8.3 MDIForm1窗體的文件菜單窗體的文件菜單 標 題 名 稱 縮進 &File &New menuFile menuFileNew 否 是 第8章 菜單的設計和MDI程序設計 (6) 在mnuFileNew_Click過程中增加以下代碼。Private Sub menuFileNew_Click( ) 創(chuàng)建名為
32、NewDoc的窗體Form1的一個新實例 Dim NewDoc As New Form1 顯示此新窗體 NewDoc.Show End Sub 這個過程創(chuàng)建并顯示Form1的名為NewDoc的一個新實例(或其副本)。每當從“文件”菜單中選取“新建”命令時,將會創(chuàng)建一個與Form1完全相同的實例,它包含F(xiàn)orm1所包含的所有控件和代碼。 第8章 菜單的設計和MDI程序設計 (7) 給Form1窗體的Form_Resize過程添加以下代碼:Private Sub Form_Resize( ) 擴展文本框以放置當前子窗體Text1.Height = ScaleHeightText1.Width =
33、ScaleWidthEnd Sub 第8章 菜單的設計和MDI程序設計 Form_Resize事件過程的代碼,像Form1中的所有代碼一樣,能為Form1的每一個實例所共享。當顯示窗體的幾個實例時,每個窗體都能識別各自的事件。當一個事件出現(xiàn)時,該事件過程的代碼就會被調用。由于相同的代碼為每個實例所共享,尤其是每個實例都具有相同的名字(Form1)時,調用該代碼的窗體是如何引用的,這對程序員來說是一個非常重要的問題。 在這種情況下,通常提供的命令是對當前活動子窗體上具有焦點的控件進行操作。例如,假設想從子窗體的文本框中把所選文本復制到剪貼板上,在應用程序的“編輯”菜單上有一個“復制”菜單項,它的
34、Click事件將會調用EditCopyProc,把選定的文本復制到剪貼板上。 第8章 菜單的設計和MDI程序設計 由于應用程序可以有同一子窗體的許多實例,所以EditCopyProc需要知道使用的是哪一個窗體。為此需要使用MDI窗體的ActiveForm屬性,該屬性可以返回具有焦點的或者最后被激活的子窗體。當訪問ActiveForm屬性時,至少應有一個MDI子窗體被加載或可見,否則會返回一個錯誤。 當一個窗體中有幾個控件時,也需要指定哪個控件是活動的。像ActiveForm屬性一樣, ActiveControl屬性能返回活動子窗體上具有焦點的控件。下邊是一個實例例程,從子窗體菜單、MDI窗體菜
35、單或者工具欄按鈕上可對它進行調用。 第8章 菜單的設計和MDI程序設計 rivate Sub mnuCopy_Click( ) 選定文本復制到剪貼板上Clipboard.SetText MDINotePad.ActiveForm.ActiveControl.SelTextEnd Sub 假如正在編寫被多個窗體實例調用的代碼,不用窗體標識符訪問窗體的控件或屬性是一個好辦法。例如,用Text1.Height引用Form1上文本框的高度,而不是使用Form1.Text1.Height。這樣,該代碼總是影響當前窗體。 第8章 菜單的設計和MDI程序設計 在代碼中指定當前窗體的另一種方法是用Me關鍵字,
36、即用Me關鍵字來引用當前其代碼正在運行的窗體。當需要把當前窗體實例的引用參數(shù)傳遞給過程時,這個關鍵字很有用。 除了在這里提到的方法以外, Mdinote.vbp示例應用程序還包含許多MDI技巧,如利用MDI子窗體數(shù)組?;ㄒ恍r間對該示例代碼進行全面研究就會掌握這些技巧。Sdinote.vbp示例應用程序是同一應用程序轉換為SDI樣式的實現(xiàn),比較這兩個例子可以明白MDI和SDI技巧的差別。 第8章 菜單的設計和MDI程序設計 (8) 運行應用程序如圖8.6所示。 圖8.6 多文檔顯示結果 第8章 菜單的設計和MDI程序設計 8.3 工工 具具 欄欄 8.3.1 手工創(chuàng)建工具欄手工創(chuàng)建工具欄 在窗
37、體或MDI窗體上手工創(chuàng)建工具欄,通常是用PictureBox控件作為工具欄按鈕的容器,用CommandButton或Image控件作為工具欄的按鈕。工具欄上的每一個按鈕應指定一個圖像和提示文字。提示文字是當鼠標指針移動到一個按鈕上時顯示的信息,一般是按鈕的名稱。如果要制作一個非常完美的界面,則要為每一個按鈕準備三個圖像,一個是普通狀態(tài)下的圖案,一個是被鼠標按下的圖案,還需要多準備一個鼠標指針停留時凸出的圖案。這樣,在工具欄上平時顯示一按鈕的圖案,然后對鼠標不同的操作,再顯示不同的圖案。 第8章 菜單的設計和MDI程序設計 下面介紹手工創(chuàng)建工具欄的一般過程。 (1) 在窗體或MDI窗體上放置一個
38、圖片框。如果是普通窗體,則必須將它的Align屬性設置為1,圖片框才會自動伸展寬度,直到填滿窗體工作空間。如果是MDI窗體,則不需要作這一屬性設置,它會自動伸展。需要讀者注意的是,在MDI窗體上只能用圖片框作為工具欄按鈕的容器,因為只有那些直接支持Align屬性的控件才能放置在MDI窗體上,而圖片框是支持這一屬性的惟一的標準控件。 第8章 菜單的設計和MDI程序設計 (2) 在圖片框中,可以放置任何想在工具欄上顯示的控件。通常用CommandButton或Image控件來創(chuàng)建工具欄按鈕。在圖片框中添加控件不能使用雙擊工具箱上控件按鈕的自動方法,而應該單擊工具箱中的控件按鈕,然后用出現(xiàn)的“+”指
39、針在圖片框中畫出控件。 (3) 設置屬性??蔀楣ぞ邫谏巷@示的每一個控件設置Picture屬性,指定一個圖片。如果用戶需要的話,還可以通過ToolTipText屬性來設置工具提示。 第8章 菜單的設計和MDI程序設計 (4) 編寫代碼。因為工具欄頻繁地用于提供對其它命令的快捷訪問,因而在大部分時間內都是從每一個按鈕的Click事件中調用其它過程,比如對應的菜單命令。 對于工具欄中的各個控件,在創(chuàng)建的時候不可避免地會在它們之間留空隙或間距不等,這樣會影響工具欄的美觀。如果要刪除按鈕之間的空隙或調整間距,應首先選中這些控件,然后使用“格式”菜單下“水平間距”子菜單中的“刪除”或“相同間距”命令。 第
40、8章 菜單的設計和MDI程序設計 8.3.2 工具欄應用舉例工具欄應用舉例 【例8-4】 修改上面“手工創(chuàng)建工具欄”一例,把命令按鈕改成工具欄上的按鈕。工具欄上只有兩個按鈕:新建和打開。 操作步驟如下: (1) 窗體上建立一個圖片框(picToolbar),將其Align屬性設置為1。 (2) 在窗體上建立一個通用對話框(CMDialog1)和兩個圖像框,它們的名稱分別為imgFileNewButton和imgFileOpenButton。 第8章 菜單的設計和MDI程序設計 (3) 通用對話框的屬性同上例設置。 (4) 在imgFileNewButton和imgFileOpenButton中
41、分別裝入圖片,它們的ToolTipText屬性分別設置為“新建文件”和“打開文件”。 (5) 兩個按鈕的Click事件過程非常簡單,請同學自己完成。 第8章 菜單的設計和MDI程序設計 8.3.3 協(xié)調菜單與工具欄的外觀協(xié)調菜單與工具欄的外觀 1控制菜單的外觀控制菜單的外觀 通過設置窗體的NegotiateMenus屬性可以決定一個鏈接或嵌入的對象的菜單是否出現(xiàn)在容器窗體中。如果子窗體的NegotiateMenus屬性設置為True(缺省),而且容器有一個定義的菜單欄,那么,當這個對象被激活時,它的菜單就放置在容器的菜單欄中。如果容器沒有菜單欄,或者子窗體的NegotiateMenus屬性被設
42、置為False,那么,當這個對象激活時對象的菜單將不出現(xiàn)。 第8章 菜單的設計和MDI程序設計 2控制工具欄的外觀控制工具欄的外觀 MDI窗體的NegotiateToolbars屬性決定了鏈接或嵌入對象的工具欄是不固定的調色板還是被放置在父窗體上。這種性能不要 求 工 具 欄 出 現(xiàn) 在 M D I 父 窗 體 上 。 如 果 M D I 窗 體 的NegotiateToolbars屬性設為True,則對象的工具欄出現(xiàn)在MDI父窗體上。如果MDI窗體的NegotiateToolbars設為False,則對象的工具欄就為不固定的調色板。 如果MDI窗體包含工具欄,它通常被包含在父窗體的Pictu
43、reBox控件中。圖片框的Negotiate屬性決定了被激活時容器的工具欄是繼續(xù)顯示還是被對象的工具欄所代替。如果Negotiate設置為True,則除了容器的工具欄外還顯示對象的工具欄。如果Negotiate設置為False,則對象的工具欄代替容器的工具欄。 第8章 菜單的設計和MDI程序設計 8.4 對對 話話 框框 8.4.1 設計自定義對話框設計自定義對話框 自定義對話框是用戶所創(chuàng)建的含有控件的窗體。這些控件包括命令按鈕、單選鈕、檢查框和文本框等,它們可以為應用程序接收信息。因此,創(chuàng)建自定義對話框就是建立一個窗體,在窗體上根據(jù)需要放置控件,通過設置屬性值來自定義窗體的外觀。作為對話框的窗體與一般的窗體在外觀上是有所區(qū)別的,對話框沒有控制菜單框及最大化、最小化按鈕,不能改變它的大小,所以對對話框應該做如表8.4所示的屬性設置。第8章 菜單的設計和MDI程序設計 表表8.4 對話框屬性對話框屬性 屬 性 值 說 明 BorderStyle 1 邊框類型為固定的單個邊框,防止對話框在運行時被改變尺寸 ControlBox False 取消控制菜單框 MaxButton False 取消最大化按鈕,防止對話框在運行時被最大化 Mi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度棉花價格指數(shù)編制與應用合同4篇
- 2025年度個人購房借款合同物業(yè)管理服務協(xié)議3篇
- 二零二五年度中小企業(yè)應收賬款質押貸款合同范本4篇
- 2025年航空航天產(chǎn)業(yè)投資入股分紅合同3篇
- 2025年度租賃車輛智能監(jiān)控服務合同遠程管理4篇
- 2025年度個人房產(chǎn)抵押買賣合同示范文本3篇
- 2025年度LED節(jié)能照明產(chǎn)品安裝與售后服務合同3篇
- 2025年度租賃房產(chǎn)租賃期限延長合同范本3篇
- 2025年度白酒文化旅游節(jié)贊助合作合同范本3篇
- 二零二五版生物科技研發(fā)成果購銷合同范本3篇
- 2022年睪丸腫瘤診斷治療指南
- 被執(zhí)行人給法院執(zhí)行局寫申請范本
- 主變壓器試驗報告模板
- 安全防護通道施工方案
- 視覺元素對心理感知的影響
- 飯店管理基礎知識(第三版)中職PPT完整全套教學課件
- 柴油供貨運輸服務方案
- 2023年重慶市中考物理A卷試卷【含答案】
- 110應急聯(lián)動預案
- 光伏發(fā)電監(jiān)理規(guī)劃
- 清洗劑msds清洗劑MSDS
評論
0/150
提交評論