去除MDI子窗體最大化后在MainMenuStrip上自動產(chǎn)生的最大化等按鈕_第1頁
去除MDI子窗體最大化后在MainMenuStrip上自動產(chǎn)生的最大化等按鈕_第2頁
去除MDI子窗體最大化后在MainMenuStrip上自動產(chǎn)生的最大化等按鈕_第3頁
去除MDI子窗體最大化后在MainMenuStrip上自動產(chǎn)生的最大化等按鈕_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、去除 MDI 子窗體最大化后在MainMenuStrip 上自動產(chǎn)生的最大化等按鈕2010-06-04 15:29場景描述:? 程序有一個 MDI父窗體 frmMain ,內(nèi)含一個 MenuStrip 控件 mnMain? MDI子窗體名為 frmTransfer? mnMain包含菜單項“運單管理”及其子菜單項“調(diào)件運單”當(dāng)點擊“購件運單”菜單項時,要求自動以最大化的方式顯示子窗體 frmTransfer編寫代碼如下:privatevoid miShowTransfer_Click(objectsender, EventArgs e)frmTransfer ft =new frmTransf

2、er();ft.MdiParent =this ;ft.WindowState = FormWindowState.Maximized;ft.Show();運行后如下圖:我們發(fā)現(xiàn)在菜單 mnMain被自動添加了一個圖標(最左側(cè))和三個窗體控制按鈕(最右鍘):最小化按鈕,還原(最大化)按鈕,關(guān)閉按鈕。而這不是我們想要的,我們更希望它與我們常用的 Windows軟件保持一致的風(fēng)格,另外最好能像Word那樣只有一個“關(guān)閉”按鈕。ps: 如果你不是一開始就讓子窗體最大化而是手動最大化,那么這些自動的行為可能會讓你更不舒服,因為菜單看起來在“動”,至少這讓我感到混亂。那么至少要除去左側(cè)的圖標(實際上是對

3、應(yīng)的 System 菜單),如果可能再去掉“最小化”和“還原”按鈕。思路 A:首先想到的是對子窗體進行設(shè)計時設(shè)置,將 ControlBox 屬性設(shè)置為 False ??蛇@樣一來連“關(guān)閉”按鈕也沒了,還要在主菜單右側(cè)自己添加一個1ToolStripMenuItem ,并判斷當(dāng)前活動窗口來實現(xiàn)關(guān)閉功能。雖然應(yīng)該可行,但感覺有點劍走偏鋒的意味。 更何況別忘了還要控制這個人造“關(guān)閉”按鈕的顯隱邏輯:一開始沒有子窗體時不能讓它顯示出來,打開子窗體后則要讓它顯示;而關(guān)閉子窗體后還要判斷是不是最后一個子窗體,如果是要讓它隱藏這實在有點小麻煩,我是懶人,所以放棄了這個思路。思路 B:那么設(shè)置子窗體的 Maxi

4、mizedBox,MinimizeBox 屬性為 False ,ShowIcon屬性也設(shè)為 False 呢?很遺憾,這在子窗體沒有最大化時表現(xiàn)很好, 可是一旦最大化后依然如上邊圖片所顯示的那樣。同樣,將 FormBorderStyle 屬性設(shè)為 FixToolWindow 也是如此,在最大化后一樣糟糕。思路 C:既然是被自動添加的,那么我就在你添加的時候阻止你。那么問題來了,什么時候是恰當(dāng)?shù)臅r候呢?窗體的 ResizeBegin 事件在上述代碼的情況下肯定不會被觸發(fā);而事實證明 SizeChanged 事件雖然會被觸發(fā),但此時那些“雜碎”還沒有被添加到MenuStrip 。硬攻不行,我們就退而

5、求其次不要忘了 MenuStrip 提供了 ItemAdded 事件,此事件在 ToolStripMenuItem 已添加到 MenuStrip 的項的集合時發(fā)生。經(jīng)過實驗證明當(dāng)自動添加那些“雜碎”后此事件會被觸發(fā)。雖然有一點點晚,但好在只晚一點點,早了還不認識。好了,先把它們揪出來,看看都是誰。在子窗體中添加一個按鈕button1 ,為button1的 Click 事件編寫如下代碼:privatevoid button1_Click( objectsender, EventArgs e)ToolStripItemCollection mn = ;string s = ;foreach (ToolStripMenuItem miin mn)if (mi.Text != )s += mi.Text;elses += 空 ;s +=n ;2MessageBox.Show(s);運行結(jié)果如下圖:這下都暴露出來了吧!其中要注意的是System 菜單項對應(yīng)的 Text 屬性是空的。接下來就好辦了,在主菜單的ItemAdded 事件編寫如下代碼:privatevoid mnMain_ItemAdded(objectsender, ToolStri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論