c#Winform主窗体和子窗体之间的传递
一、先将主窗体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;
}
}
效果: