Frm_Main 的 IsMdiContainer已设置为true添加了窗体one.cs、two.cs、three.cs
private void button1_Click(object sender,EventArgs e)
{
    one frmOne = new one();
    frmOne.MdiParent = this;
    frmOne.Show();
}private void button2_Click(object sender, EventArgs e)
        {
            two frmTwo = new two();
            frmTwo.MdiParent = this;
            frmTwo.Show();
        }
点击button1会不断出现 子窗体one,一个又一个......,
点击button2会不断出现 子窗体two,一个又一个......,
如何写代码,使得,无论点击多少次button1,都只显示一个子窗体oneLayoutMdi(MdiLayout.TileVertical);该写在哪里,才能实现,子窗体one与two 垂直平铺显示

解决方案 »

  1.   


    把你的one窗体修改成下面这样:
            
    又照书套用了一次设计模式private static one _instance;        public static one Instance()
            {
                if (_instance == null)
                    _instance = new one();            return _instance;
            }   
    打开one窗体
       private void button1_Click(object sender, EventArgs e)
            {
                one frmOne = one.Instance();            frmOne.MdiParent = this;
                frmOne.Show();
            }
      

  2.   

       
    差点忘记了最重要的地方:     private one()
            {
                InitializeComponent();
            }
      

  3.   

    1.如何写代码,使得,无论点击多少次button1,都只显示一个子窗体one 
    bool  flag=true; 窗体显示后为false
    private void button1_Click(object sender,EventArgs e)
    {
    if(flag==true)
      {
      one frmOne = new one();
        frmOne.MdiParent = this;
        frmOne.Show();
    }
    }
    2.该写在哪里,才能实现,子窗体one与two 垂直平铺显示
    可以加一个button ,其click事件的代码中加上LayoutMdi(MdiLayout.TileVertical);这样就ok了  建议楼主看下文本编辑器的源码。挺简单的
      

  4.   


    private void button1_Click(object sender,EventArgs e)
    {
    if(flag==true)
      {
      one frmOne = new one();
        frmOne.MdiParent = this;
        frmOne.Show();
       flag=false;
    }
    }上面失误了
      

  5.   


    是在 子窗体one的属性,更改吗?
      

  6.   


    不另外添加button的click事件就想实现,点击button1,出现one,如果已出现two,则与two垂直平铺就想实现,点击button2,出现two,如果已出现one,则与one垂直平铺
      

  7.   

    记两个flag   flag1和flag2  如果flag1和flag2都为false(即已经打开了)
    代码如下:private void button1_Click(object sender,EventArgs e)
    {
    if(flag1==true)
      {
        one frmOne = new one();
        frmOne.MdiParent = this;
        frmOne.Show();
        flag1=false;
    }
    else 
     if(flag2==flase)
     {
    LayoutMdi(MdiLayout.TileVertical);

    }
      

  8.   

    去下载个文本编辑器源码看吧!看过了这些都是小kiss
      

  9.   


      private void 新建NToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form2 f1 = new Form2();
                f1.MdiParent = this;
                f1.Show();
                f1.Text = "新建文档" + (formName + 1);
                formName++;
            }
    这个省事
      

  10.   

    应该用检查是否打开为同一窗口的方法。foreach (Form zw in this.MdiChildren)
                {
                    if (zw.Name == "kqzl")
                    {
                        zw.Visible = true;
                        MessageBox.Show("已打开同类窗口了", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        zw.Activate();
                        return;
                    }
                }
                kqxs.kqzl kq = new kqxs.kqzl();
                kq.MdiParent = this;
                kq.WindowState = FormWindowState.Maximized;
                kq.Show();