当我从另一个表单返回主表单时,我在显示计时器时遇到问题
主窗体有以下代码
public Main()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
timeLabel.Text = DateTime.Now.ToString("dd/MMM/yyyy HH:mm");
}
private void GestioneSerataButton_Click(object sender, EventArgs e)
{
this.Hide();
GestioneSerataForm gfor = new GestioneSerataForm();
gfor.Show();
}
private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
现在如果我单击按钮以转到 GestioneSerataForm 就可以了。
当我尝试使用以下代码关闭 GestioneSerataForm 时
private void GestioneSerataForm_FormClosing(object sender, FormClosingEventArgs e)
{
Main main = new Main();
this.Close();
main.Show();
}
我在 Main.Designer 中有与 Controls.Add(timeLabel) 相关的 System.StackOverflowException;
我该如何解决这个问题?
我的需要只是显示当前计时器而不是其他
我尝试启动和停止计时器并将其公开,以便在 GestioneSerataForm 中重新启动它,但它不起作用
您的
Main
表单创建并显示 GestioneSerataForm
表单:
GestioneSerataForm gfor = new GestioneSerataForm();
gfor.Show();
您的
GestioneSerataForm
表单将创建并显示 Main
表单:
Main main = new Main();
//...
main.Show();
这种情况会无限期地发生,每种形式都会一遍又一遍地创造另一种形式。
不要创建 new
Main
表单,而是提供 GestioneSerataForm
表单实例并引用您已有的 Main
表单。 例如:
// in GestioneSerataForm.cs
private Main _main;
public GestioneSerataForm(Main main)
{
_main = main;
}
和:
// in Main.cs
private void GestioneSerataButton_Click(object sender, EventArgs e)
{
this.Hide();
GestioneSerataForm gfor = new GestioneSerataForm(this);
gfor.Show();
}
请注意调用
this
构造函数时使用的对 GestioneSerataForm
的引用。
然后您可以使用该引用来显示原始
Main
表单实例:
private void GestioneSerataForm_FormClosing(object sender, FormClosingEventArgs e)
{
_main.Show();
}