之前做过一个子窗体间切换的程序,当时写的比较乱,现在又用到了,所以重新整理了下;
创建一个窗体切换类:FrmChangingOver
public class FrmChangingOver
{
/// <summary>
/// 窗体关闭
/// </summary>
/// <param name="Open_FrmName">要打开的窗体name</param>
/// <param name="ParentFrm">在哪打开</param>
/// <returns></returns>
public bool CloseWindow(String Open_FrmName, SplitContainer ParentFrm)
{
bool Res = false;
/*判断容器中控件是否是窗体,
* 如果是窗体,判断窗体.Name和传入的Open_FrmName是否一致,
* 如果一致,则返回“已创建窗体,即true”
* 如果不一致,关闭容器上的窗体,并返回“未创建窗体,即false”
*/
foreach (Control ct in ParentFrm.Panel1.Controls)
{
if (ct is Form)
{
Form frm = (Form)ct;
if (frm.Name == Open_FrmName)
{
Res = true;//若返回true,则不创建窗体
break;
}
else
{
Res = false;
frm.Close();//窗体关闭,同时创建新窗体
}
}
}
return Res;
}
/// <summary>
/// 打开窗体
/// </summary>
/// <param name="ChildFrm">子窗体</param>
/// <param name="ParentFrm">父窗体</param>
public void OpenWindow(Form ChildFrm, SplitContainer ParentFrm)
{
ChildFrm.TopLevel = false;
ChildFrm.FormBorderStyle = FormBorderStyle.None;
ChildFrm.Dock = DockStyle.Fill;
ChildFrm.Parent = ParentFrm.Panel1;
ChildFrm.Show();
}
}
创建一个Mian窗体 两个子窗体FrmView,FrmAlam;如果有多个子窗体,只是在点击事件更换窗体.Name即可
public Form1()
{
InitializeComponent();
}
Common.FrmChangingOver frm_change=new Common.FrmChangingOver();
//splitContainer2.Panel2 为子窗体所在的容器
private void BtnFrmView_Click(object sender, EventArgs e)
{
if(frm_change.CloseWindow("FrmView",splitContainer2)==false)
{
FrmView frmview = new FrmView();
frm_change.OpenWindow(frmview, splitContainer2);
}
}
private void BtnFrmAlam_Click(object sender, EventArgs e)
{
if (frm_change.CloseWindow("FrmAlam", splitContainer2) == false)
{
FrmAlam frmalam=new FrmAlam();
frm_change.OpenWindow(frmalam, splitContainer2);
}
}