多重文件介面處理(MDI)

來源:互聯網
上載者:User
轉自:http://qianshao.blog.51cto.com/935360/201520

u 本節學習目標:

n 理解 MDI和SDI的概念和差別

n 熟練設定MDI表單及一般表單的主要屬性設定

n 掌握並實現對MDI表單的排列技巧

n 掌握並實現多重文件介面的表單傳值技術

1-4-1 簡介

我們在前面所設計的視窗被稱為是單文件視窗(SDI),1-18所示。但很多時候的應用軟體是在多文件視窗環境下進行開發設計的,這種多重文件介面就是所謂的MDI,是從Windows 2.0下的Microsoft Excel試算表程式開始引入的,這是因為Excel試算表使用者有時需要同時操作多份表格,MDI正好為這種操作多表格提供了很大的方便,於是就產生了MDI程式。在視窗系統3.1版本中,MDI得到了更大範圍的應用。其中系統中的程式管理器和檔案管理工具都是MDI程式。

 

圖1-18 一般的單文檔(SDI)介面

MDI編程主要是在主表單中能夠建立一個MDI表單,並且能夠對主表單中的所有MDI表單實現層疊、水平平鋪和垂直平鋪。雖然這些操作比較基本,但卻是程式設計中的要點和重點。

1-4-2 多重文件介面設定及表單內容1.多重文件介面(MDI)屬性說明

一般產生的表單都屬於單文檔表單(SDI),只有將單文檔表單的IsMdiContainer屬性設定成為True,才可以被設定成為多文檔表單。見圖1-19所示。

 

圖1-19 由單文檔(SDI)改成為多文檔(MDI)介面

多重文件介面的基本屬性其實也就是表單的屬性,表單主要屬性、方法和事件見下表1-7所示:

屬性

說明

StartPosition

初始視窗位置。一般為了使得表單啟動時候置中對齊,多設定該屬性值為CenterScreen

CancelButton

該屬性可以提供自動搜尋當前表單之中的所有Button對象,通過列表有使用者確認按下esc鍵後執行那個Button按鈕。

ControlBox

確定系統是否有表徵圖和最大最小關閉按鈕。屬性值為true和false,當為false時候則無法看到標題列目表徵圖和最大最小關閉按鈕

FormBorderStyle

指定邊框和標題列的外觀和行為。共有七中效果可供選擇,比如選擇FixedToolWindow的時候,僅存關閉按鈕,沒有最大和最小按鈕。

HelpButton

確定表單的標題列上是否有協助按鈕。

KeyPreview

確定表單鍵盤事件是否已經向表單註冊。

MainMenuStrip

確定鍵盤啟用和多文檔合并。

ShowInTaskbar

確定表單是否出現在工作列中。

WindowState

確定表單的初始可視狀態。共有三種狀態,Normal為正常態,Maximized為初始最大化,Minimized為初始最小化。

方法

說明

Activate

當表單被啟用時候發生

MdiChildActivate

當MDI子表單被啟用時候發生

事件

說明

Activated

每當表單被啟用時候發生

Load

每當使用者載入表單時候發生

表1-7 MessageBox.Show()方法重載

請讀者自行根據屬性提示內容,簡單嘗試表單內容的性質和效果。

2.案例學習:建立多重文件介面(MDI)

本次實驗目標是首先建立一個Form主表單,並在該主表單之中建立菜單,通過菜單開啟其餘的子表單。最終顯示介面1-17所示。

 

圖1-20 多文檔主介面

u 實驗步驟(1):

由圖1-18所示,首先將當前操作的Form表單內容設定如下:

屬性名稱

屬性參數設定

說明

text

父視窗

表單標籤名稱

StartPosition

CenterScreen

表單置中

FormBorderStyle

FixedToolWindow

無最大最小按鈕

IsMdiContainer

True

設為MDI主視窗

u 實驗步驟(2):

為該MDI表單配置MainMenu菜單,工具箱預設沒有該控制項,開啟工具箱的所有Windows控制項部分,用按右鍵工具箱介面,在開啟的菜單中選擇“選擇項”,並在展開的系統選擇項中尋找MainMenu控制項,添加後即出現在Windows控制項部分。具體操作1-21所示:

 

圖1-21 為MDI表單添加MainMenu菜單控制項

u 實驗步驟(3):

開啟方案總管,建立一個Windows表單,取名為Form2,該表單並非MDI表單,即無需指定其IsMdiContainer屬性為True。雙擊圖1-20中功能表項目內的子視窗1,進入代碼編輯地區,填寫下面代碼:

小實驗:子視窗1功能表項目按一下滑鼠事件來源代碼:

private void menuItem3_Click(object sender, EventArgs e)

{

Form2 Mdichild = new Form2();//首先執行個體化Form2對象,命名為Mdichild

Mdichild.MdiParent = this;

//其次指定即將開啟的Form2對象的MdiParent,即Form2對象的MDI父視窗,為當前的主MDI視窗。

Mdichild.Show();//顯示Form2對象的MDI父視窗

}

此時,開啟的Form2表單就只能夠在當前表單下活動,而不會出當前表單的範圍。按照此方法,再建立兩個表單,命名為Form3和 Form4,並可以通過子視窗2和子視窗3菜單單擊開啟它們。

3. 案例學習:實現對MDI表單的排列

(1)實現對MDI表單的層疊

對於在主表單中實現對MDI表單的層疊操作,在主程式中是通過一個方法LayoutMdi來實現的,他所帶的參數是MdiLayout.Cascade,在原有的menuItem3_Click事件中添加如下代碼:

小實驗:MDI表單的層疊原始碼:

private void menuItem3_Click(object sender, EventArgs e)

{

…….

this.LayoutMdi(MdiLayout.Cascade);

}

(2)實現對MDI表單的水平平鋪

要在主表單實現MDI表單水平平鋪,也是通過LayoutMdi方法,此時所帶的參數是MdiLayout.TileHorizontal,在原有的menuItem3_Click事件中修改如下代碼:

小實驗:MDI表單的水平平鋪原始碼:

private void menuItem3_Click(object sender, EventArgs e)

{

……

this.LayoutMdi(MdiLayout.TileHorizontal);

}

(3)實現對MDI表單的垂直平鋪

要在主表單實現MDI表單垂直平鋪,也是通過LayoutMdi方法,此時所帶的參數是MdiLayout.TileVertical,在原有的menuItem3_Click事件中修改如下代碼:

小實驗:MDI表單的垂直平鋪原始碼:

private void menuItem3_Click(object sender, EventArgs e)

{ ……

this.LayoutMdi(MdiLayout.TileVertical);

}

以上內容實驗結果如1-22所示:

圖1-22 MDI表單排列子表單的多種方式

本文出自 “熊貓寫程式” 部落格,轉載請與作者聯絡!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.