MDI(Multiple Document Interface)應用程序,即多文檔界面程序是允許創建在單個容器中包含多個窗體的應用程序。多文檔揭秘那可同時打開多個文檔,簡化了文檔之間的信息交換。
MDI應用程序是由一個父窗體和多個子窗體組成。
首先:創建父窗體 設置IsMdiContainer屬性為true.
其次:創建子窗體
代碼:父窗體按鈕事件

private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); //ShowForm(f2); f2.MdiParent = this; f2.WindowState = FormWindowState.Maximized; //f2.Text = "新建文檔" + intNumber++; f2.Show(); }
1.創建子窗體方法

private void ShowForm(Form frm) { foreach (Form f in this.MdiChildren) { if (f.Name == frm.Name) { f.Activate(); return; } } frm.MdiParent = this; frm.WindowState = FormWindowState.Normal; frm.Show(); }
2.設置子窗體屬性
ChildForm frm = new ChildForm();
frm.MdiParent = this;
frm.FormBorderStyle = FormBorderStyle.None;
frm.MinimizeBox = false;
frm.MinimizeBox = false;
frm.ShowIcon = false;
frm.show();
frm.Dock = DockStyle.Fill;//完全填充到應用程序
3.某個子窗體只打開一次

private bool isExist(string ChildTypeName) { bool b_result = false; foreach (Form frm in MdiChildren) { if (frm.GetType().Name == ChildTypeName) { frm.Activate(); b_result = true; break; } } return b_result; } private void button1_Click(object sender, EventArgs e) { // Form2 f2 = new Form2(); // //ShowForm(f2); // f2.MdiParent = this; // f2.WindowState = FormWindowState.Maximized; // f2.Text = "新建文檔" + intNumber++; // f2.Show(); if (!isExist("Form2")) { Form2 frm2 = new Form2(); frm2.MdiParent = this; frm2.Show(); } }
4.排列子窗體
public void LayoutMdi (MdiLayout value)
5.關閉某個開着的子窗體

private void CloseChildForm(string frmName) { for (int i = 0; i < this.MdiChildren.Length; i++) { if (this.MdiChildren[i].Text == frmName) this.MdiChildren[i].Close(); } }
6.父窗體的TextBox接受子窗體TextBox輸入
子窗體textBox事件,首先設置父窗體TextBox作用域修改為public

private void textBox1_TextChanged(object sender, EventArgs e) { TextBox text = ((Form1)this.MdiParent).textBox2; text.Text = textBox1.Text; }
7.取出子窗體最大化時顯示在父窗體MenuStrip菜單控件上的最大化 還原 空白等按鈕
父窗體MenuStrip菜單的ItemAdded事件

private void menuStrip1_ItemAdded(object sender, ToolStripItemEventArgs e) { if (e.Item.Text.Length == 0 || e.Item.Text == "還原(&R)" || e.Item.Text == "最小化(&N)") { e.Item.Visible = false; } }
8.MenuStrip關聯類
ToolStripMenuItem 表示在MenuStrip或ContextMenuStrip上顯示的可選擇選項
ContextMenuStrip 表示快捷菜單
ToolStripDropDownItem 表示為派生自ToolStripItem的控件提供基本功能,當單擊某個控件時顯示下拉項
9.MenuStrip菜單自動展開

private void 文件ToolStripMenuItem_MouseEnter(object sender, EventArgs e) { 文件ToolStripMenuItem.ShowDropDown(); } private void 文件ToolStripMenuItem_MouseLeave(object sender, EventArgs e) { 文件ToolStripMenuItem.HideDropDown(); }
10.菜單根據子窗體進行變化
通過設置AllowMerge MergeAction和MergeIndex屬性。可以講MDI子菜單追加到MDI父菜單,並且當關閉MDI子窗體時,可以從MDI夫窗體移除鎖追加的菜單。
//父窗體中設置 this.文件ToolStripMenuItem.MergeIndex = 1; //子窗體中設置 this.測試ToolStripMenuItem.MergeAction = System.Windows.Forms.MergeAction.Insert; this.測試ToolStripMenuItem.MergeIndex = 1;
11.快捷菜單
ContextMenuStrip控件
12.RichTextBox控件 顯示行號 列號

private void rtb_SelectionChanged(object sender, EventArgs e) { t1.Text = "Ln:" + (rtb.GetLineFromCharIndex(rtb.SelectionStart) + 1).ToString(); t2.Text = "Col:" + (rtb.SelectionStart - rtb.GetFirstCharIndexFromLine(rtb.GetLineFromCharIndex(rtb.SelectionStart))).ToString(); }
注:本文整理自《C#編程網絡大講堂》!!!