2011年4月6日 星期三

MDI視窗建立

MDI(Multiple Document Interface)視窗建立
資料來源:http://felix0624.blog.ithome.com.tw/




建立Windows MDI程式(一) -- 建立父視窗

1. 新增Window Form
2. 設定屬性:
IsMdiContainer: true
WindowState: maximized




建立Windows MDI程式(二) -- 加入Menu



建立完父視窗, 現在在父視窗加入menu, 並且有瀏覽已開子視窗及並排, 重疊顯示功能, 完成時如下圖
(一) 加入Menu
1. 新增主Menu: mainMenu
2. 新增次Menu
outMenuItem: 銷貨作業
basicMenuItem: 基本資料作業
sysMenuItem: 系統設定
windowMenuItem: 視窗
     cascadeMenuItem: 重疊顯示
     titileVerticalMenuItem: 垂直並排
     tileHorizontalMenuItem: 水平並排
(二)設定瀏覽已開過的視窗
假設要將已開過的子視窗列於[視窗](windowMenuItem), 設定方式如下
將主menu(mainMenu)的MdiWindowListItem屬性設為windowMenuItem即可
(三) 設定重疊顯示
  private void cascadeMenuItem_Click(object sender, EventArgs e)
  {
     LayoutMdi(MdiLayout.Cascade);
  }
(四) 設定垂直並排
  private void tileVerticalMenuItem_Click(object sender, EventArgs e)
  {
        LayoutMdi(MdiLayout.TileVertical);
  }
(五) 設定水平並排
  private void tileHorizontalMenuItem_Click(object sender, EventArgs e)
  {
     LayoutMdi(MdiLayout.TileHorizontal);
  }
(六)開啟子視窗
  private void form1MenuItem_Click(object sender, EventArgs e)
  {
  Form1 form = new Form1();
   form.MdiParent = this;
   form.Show();
  }

建立Windows MDI程式(三) -- 開啟子視窗

一般開啟子視窗之方式如下:
private void forem1MenuItem_Click(object sender, EventArgs e)
{
    Form1 form = new Form1();
    form.MdiParent = this;
    form.Show();
}

但是這樣有一個狀況, 就是如果在執行一次, 還是會再開一次, 因此若要避免此一狀況, 方法如下
        public bool IsShowChildForm(string MdiFormName)
        {
            foreach (Form var in MdiChildren)
            {
                if (MdiFormName == var.Name)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            return true;
        }
        public void CloseChildForm(string MdiFormName)
        {
            Form activechild = this.ActiveMdiChild;
            if (activechild != null)
            {
                activechild.Close();
            }
        }

        private void enterFormToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //開啟進入視窗  關閉目前子視窗
            if (IsShowChildForm("frmEnter"))
            {
                EnterForm frmEnter = new EnterForm();
                CloseChildForm("frmInfor");
                frmEnter.TopMost = true;
                frmEnter.MdiParent = this;
                frmEnter.WindowState = FormWindowState.Maximized;

                frmEnter.Activate();
                frmEnter.Show();

            }  
        }

沒有留言: