之前做過一個子窗體間切換的程式,當時寫的比較亂,現在又用到了,是以重新整理了下;
建立一個窗體切換類: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);
}
}