C#实现在Form1的SplitContainer控件中Form2的按钮打开Form3

C#实现在Form1的SplitContainer控件中Form2的按钮打开Form3

问题描述

C#实现在Form1的SplitContainer控件中Form2的按钮打开Form3,Form2和Form3都在Form1的SplitContainer中。Form1的SplitConTainer控件做为Form2和Form3的父窗体,并且用MDI窗口实现。

解决方法

新建Form解决方案,命名为WindowsFormsAPP1。新建Form1、Form2和Form3备用;
在Form1中添加Splitcontainer控件;
C#实现在Form1的SplitContainer控件中Form2的按钮打开Form3

在Form2中添加按钮控件;
在Form3中添加按钮控件;
双击Form1标题栏进入Form1后台程序。在Form1_Load事件中添加程序。

	public static Form1 sform1;
        private void Form1_Load(object sender, EventArgs e)
        {
           sform1 = this;
            this.IsMdiContainer = true;//设置Form1是父窗体
            Form2 fm2 = new Form2();//实例化Form2窗体
            fm2.MdiParent = this;//设置窗体的父子关系
            fm2.Parent = splitContainer1.Panel2;//子窗体的容器是父窗体的Panel2
            fm2.TopLevel = false;//必须关闭,否则冲突
            this.splitContainer1.Panel2.Controls.Add(fm2);//将Form2添加到Panel中
            fm2.Show();
            //fm2.Focus();//获得焦点
            fm2.BringToFront();
        }

在Form1的类中创建一个静态的Form1 实例。不然在Form2中找不到父窗体;
在Form1程序中添加一个打开Form3的函数,和打开Form2的程序几乎相同;

public void OpenForm3()
        {
            Form3 fm3 = new Form3();
            fm3.MdiParent = this;
            fm3.Parent = splitContainer1.Panel2;
            fm3.TopLevel = false;
            this.splitContainer1.Panel2.Controls.Add(fm3);
            fm3.Show();
            fm3.BringToFront();
        }

在Form2的按钮事件中编写:

private void button1_Click(object sender, EventArgs e)
        {
            Form1.sform1.OpenForm3();
        }

这样就可以在Form1的SplitContiner中的Form2打开Form3窗体。
C#实现在Form1的SplitContainer控件中Form2的按钮打开Form3

C#实现在Form1的SplitContainer控件中Form2的按钮打开Form3