none
C# Winform里可不可以将一个窗口添加到另一个窗口中? RRS feed

  • 问题

  • 我有个程序的主界面,里面放了许多用于显示、统计等等操作的控件,若将这些控件放在一个界面里,那么程序的主界面的后台代码会有很多,请问可不可以将他们放在单个窗口中,然后在将这些单一窗口添加到主界面中?
    2010年7月5日 6:04

答案

  • 在主窗体属性里找 IsMidContainer选为True
    在主窗体调用子窗体是这样写

                frmRoutesManage routesManage = new frmRoutesManage();
                routesManage.MdiParent = this;
                routesManage.Show();
                
     子窗体FormLoad时加这2句
             private void frmRoutesManage_Load(object sender, EventArgs e)
            {
                this.WindowState = FormWindowState.Maximized;
                this.FormBorderStyle = FormBorderStyle.Sizable;
                ....code....
             }          

    这样就可以了
    If this is helpful
      { Please Mark as Answered }
    else if it is not helpful
      { Un-Mark as Answered }


    Best Regards
    Huan Li, Code Blog: Small is New Big In C#
    2010年7月5日 7:59
  • 不用设置MDI窗体也可以把一个窗体添加到另一个窗体中

    下面的代码把窗体3添加到窗体4的PANEL控件中

    你可以把窗体的TopLevel属性设为false

     private void Form4_Load(object sender, EventArgs e)
        {
        
          //把form3窗体添加到form4中的panel控件中
          Form3 f3 = new Form3();
          f3.Show();
          f3.TopLevel = false;

          this.panel1.Controls.Add(f3);
     
        }


    .net/asp.net开发群118343907
    2010年7月5日 14:34
  • 如果不容易拆成UserControl,可以考虑用“碎片”解决后台代码过多的问题。

    文件1:Form1.cs
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing.Imaging;
    using System.Runtime.InteropServices;

    namespace Test
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                Show();
            }
            private void button1_Click(object sender, EventArgs e)
            {
            }
        }
    }

    文件2:Class2.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace Test
    {
        public partial class Form1 : Form
        {
            private void Show()
            {
                MessageBox.Show("hello");
            }
        }
    }

    说明:碎片数量不限。

    2010年7月6日 10:18

全部回复

  • 不行。


    键盘人生。
    2010年7月5日 6:19
  • 在主窗体属性里找 IsMidContainer选为True
    在主窗体调用子窗体是这样写

                frmRoutesManage routesManage = new frmRoutesManage();
                routesManage.MdiParent = this;
                routesManage.Show();
                
     子窗体FormLoad时加这2句
             private void frmRoutesManage_Load(object sender, EventArgs e)
            {
                this.WindowState = FormWindowState.Maximized;
                this.FormBorderStyle = FormBorderStyle.Sizable;
                ....code....
             }          

    这样就可以了
    If this is helpful
      { Please Mark as Answered }
    else if it is not helpful
      { Un-Mark as Answered }


    Best Regards
    Huan Li, Code Blog: Small is New Big In C#
    2010年7月5日 7:59
  • good idea
    2010年7月5日 9:12
  • MDI窗体吧!
    2010年7月5日 9:23
  • 不用设置MDI窗体也可以把一个窗体添加到另一个窗体中

    下面的代码把窗体3添加到窗体4的PANEL控件中

    你可以把窗体的TopLevel属性设为false

     private void Form4_Load(object sender, EventArgs e)
        {
        
          //把form3窗体添加到form4中的panel控件中
          Form3 f3 = new Form3();
          f3.Show();
          f3.TopLevel = false;

          this.panel1.Controls.Add(f3);
     
        }


    .net/asp.net开发群118343907
    2010年7月5日 14:34
  • 把界面细分,做成多个UserControl,然后把UserControl放到主界面里。
    2010年7月6日 10:10
  • 如果不容易拆成UserControl,可以考虑用“碎片”解决后台代码过多的问题。

    文件1:Form1.cs
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing.Imaging;
    using System.Runtime.InteropServices;

    namespace Test
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                Show();
            }
            private void button1_Click(object sender, EventArgs e)
            {
            }
        }
    }

    文件2:Class2.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace Test
    {
        public partial class Form1 : Form
        {
            private void Show()
            {
                MessageBox.Show("hello");
            }
        }
    }

    说明:碎片数量不限。

    2010年7月6日 10:18