一、先將主窗體FrmMain和子窗體FrmUser關聯起來。
一、主窗體全部代碼
public partial class FrmMain : Form
{
FrmUser mFrmUser = new FrmUser();
FrmPro mFrmPro = new FrmPro();
private static FrmMain frmMain;
public FrmMain()
{
InitializeComponent();
frmMain = this;//初始化主窗體
}
/// <summary>
/// 子窗體調用該方法後就可以調用主窗體的ShowMessage(string txt)方法,將信息顯示是主窗體的label中
/// </summary>
/// <returns></returns>
public static FrmMain Instance()
{
if(frmMain == null)
{
return new FrmMain();
}
return frmMain;
}
/// <summary>
/// 用戶管理按鈕的點擊事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnUserPage_Click(object sender, EventArgs e)
{
pnlMain.Controls.Clear();
mFrmUser.TopLevel = false;//設置用戶窗體爲非頂級窗體,否則不能添加到主窗體的panel中
mFrmUser.Parent = pnlMain;//設置父窗體爲主窗體
mFrmUser.Show();//將用戶窗體顯示出來
mFrmUser.StartTimer();//開啓用戶窗體中的定時器
}
/// <summary>
/// 項目按鈕的點擊事件,。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnProMng_Click(object sender, EventArgs e)
{
pnlMain.Controls.Clear();
mFrmUser.StopTimer();// 停止用戶窗體的計時器
mFrmPro.TopLevel = false;
mFrmPro.Parent = pnlMain;
mFrmPro.Show();
}
/// <summary>
/// 子窗體信息通過這個方法顯示到界面上
/// </summary>
/// <param name="txt"></param>
public void ShowMessage(string txt)
{
this.label1.Text = txt;
mFrmPro.SetText(txt);//將定時器的文本同步到項目窗體的label中
}
}
二、用戶窗體代碼
/// <summary>
/// 用戶窗體
/// </summary>
public partial class FrmUser : Form
{
public FrmUser()
{
InitializeComponent();
}
/// <summary>
/// 啓動定時器
/// </summary>
public void StartTimer()
{
timer1.Start();
}
/// <summary>
/// 關閉定時器,主窗體調用
/// </summary>
/// <returns></returns>
public bool StopTimer()
{
timer1.Stop();
return true;
}
int i = 0;
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = (i++).ToString();
FrmMain.Instance().ShowMessage((i++).ToString());//將計數器的值顯示到主窗體的label中
}
}
三、項目窗體代碼
/// <summary>
/// 項目窗體
/// </summary>
public partial class FrmPro : Form
{
public FrmPro()
{
InitializeComponent();
}
/// <summary>
/// 主窗體調用該方法顯示
/// </summary>
/// <param name="tst"></param>
public void SetText(string tst)
{
label1.Text = tst;
}
}
效果: