如何知道Winforms上的用户或代码是否关闭了窗体?
问题描述:
我正在显示一个表单,30秒后表单必须自动关闭。 为了关闭窗体,我从Timers.Timer控件调用this.Close(),它将在30秒后关闭窗体。如何知道Winforms上的用户或代码是否关闭了窗体?
private void timerClose_Tick(object sender, System.Timers.ElapsedEventArgs e)
{
if (this.InvokeRequired)
{
this.Invoke((MethodInvoker)delegate()
{
this.Close();
});
}
else
{
this.Close();
}
}
但是,如果用户希望通过单击X按钮以关闭的形式,那么我应该能够区分形式是否被用户或计时器关闭。 我有FormClosed事件做关闭时做一些东西,但在这里我需要知道表单是否由用户或计时器关闭。
private void DISPLAY_FormClosed(object sender, FormClosedEventArgs e)
{
//some stuff
timerClose.Stop();
}
我怎么知道窗体已被FormClosed Event中的User或Timer关闭?
下面的链接并不能帮助
Can we know if a window has been closed by the user or code on WPF?
在此先感谢。
答
你只需要做出bool
(我称之为由用户关闭),当计时器关闭您的形式相应地改变它。在这种情况下,如果定时器关闭它,它不再被“用户关闭”,所以我将它设置为false
。然后在结束活动中检查布尔。
实施例:
//As long as its not closed by the system, its closed by the user
private bool closedByUser = true;
private void timerClose_Tick(object sender, System.Timers.ElapsedEventArgs e)
{
if (this.InvokeRequired)
{
this.Invoke((MethodInvoker)delegate()
{
//closed by system
closedByUser = false;
this.Close();
});
}
else
{
this.Close();
}
}
private void DISPLAY_FormClosed(object sender, FormClosedEventArgs e)
{
if(closedByUser)
timerClose.Stop();
//Closed by user
else
timerClose.Stop();
//Not closed by user
}
有一个在使用System.Timers.Timer没有意义的,从工具箱使用定时器。你需要的只是你类中的一个简单的* bool *字段,在你的Tick事件处理程序中将它设置为* true *。现在你知道了。 –
我知道。但我的需求是不同的。 –
不,它不是,完成你所需要的只是使用布尔 – EpicKip