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控件;
在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窗体。