MDI窗体,子窗体在父窗体中最大化,如果子窗体已经打开则显示,不重复打开窗体

在网上找了两个解决办法:最大的不同点是一个用了父窗体的MdiChildren来作为判断依据,而另一个则是用Application.OpenForms,试了一下都可以,哪天再研究下。

第一个,转自:http://www.cnblogs.com/virusswb/

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication4
{
    
public partial class frmMain : Form
    
{
        
public frmMain()
        
{
            InitializeComponent();
        }


        
private void 登录ToolStripMenuItem_Click(object sender, EventArgs e)
        
{
            
foreach (Form form in Application.OpenForms)
            
{
                
if (form.Name == "frmLogin")
                
{
                    form.Activate();
                    form.WindowState 
= FormWindowState.Maximized;
                    
return;
                }

            }


            frmLogin login 
= new frmLogin();

            login.MdiParent 
= this;
            login.WindowState 
= FormWindowState.Maximized;
            login.Show();
        }


        
private void 日志ToolStripMenuItem_Click(object sender, EventArgs e)
        
{
            
foreach (Form form in Application.OpenForms)
            
{
                
if (form.Text == "frmLogInfo")
                
{
                    form.Activate();
                    
return;
                }

            }


            frmLogInfo log 
= new frmLogInfo();
            log.MdiParent 
= this;
            log.WindowState 
= FormWindowState.Maximized;
            log.Show();
        }


        
private void frmMain_Load(object sender, EventArgs e)
        
{
            frmLogin login 
= new frmLogin();
            login.WindowState 
= FormWindowState.Maximized;
            login.MdiParent 
= this;
            login.Show();
        }


    }


}

-------------------------------------分割线--------------------------------------------------------------------------------------------

2.MDI窗体:创建MDI父窗体方法

(1)选中Form1窗体,属性窗口中,设置IsMDIContainer为“True”(即该窗体为子窗体的MDI父窗体)

(2)拖一个MenuStrip“菜单”组件到Form1中,将第一个主菜单设置为“文件”,在下拉菜单中增加“打开Form2子窗体”和“关闭”两项。

 

3.MDI窗体:创建MDI子窗体方法

(1)在项目解决方案管理器上右击项目添加新建项,添加一个Windows窗体,Form2。

(2)双击“打开Form2子窗体”菜单按钮触发事件:

private void 打开Form2子窗体ToolStripMenuItem_Click(object sender, EventArgs e)

       Form2 frm2 = new Form2();
         frm2.MdiParent = this;
         frm2.Show();

     }

 

4.MDI窗体:确定活动的MDI子窗体(不允许连续单击弹出Form2子窗体)

双击“打开Form2子窗体”菜单按钮触发事件:

private void 打开Form2子窗体ToolStripMenuItem_Click(object sender, EventArgs e)

  foreach (Form childFrm in this.MdiChildren)  //this表示这个窗体(父窗体)
      { if (childFrm.Name == "Form2")
         if (childFrm.WindowState == FormWindowState.Minimized) //如果该子窗体最小化

              childFrm.WindowState = FormWindowState.Normal;  //把它变为正常大小窗口
                   childFrm.Activate(); //把该子窗口设为活动窗口
                   return;
                }
           else
                 childFrm.Activate();  //其他正常大小或最大化的窗口直接将它设置为活动窗口
                   return;
                }
           }
        }

         Form2 frm2 = new Form2();
         frm2.MdiParent = this;
         frm2.Show();

     }

 

5.MDI窗体:在父窗体中排列MDI子窗体方法

在"打开Form2子窗体"菜单按钮触发事件代码中的最后加入下面一句话:

this.LayoutMdi(MdiLayout.TileHorizontal);  //TileHorizontal表示平铺排列(不设为活动窗口时连续按该菜单后该子窗体平铺排列);此外,MdiLayout的属性还有:TileVertical(垂直平铺)、ArrangeIcons(子图标层叠排列)、Cascade(大窗口层叠排列)

 

 

posted @ 2009-06-09 11:48  lemontree  阅读(992)  评论(0编辑  收藏  举报