检查Win表单是否在其他情况下关闭

时间:2014-07-08 04:53:52

标签: c# events

假设我有一个带有离开事件的TextBox。当我单击WinForm的ControlBox的关闭按钮时,首先调用TextBox的离开事件,然后调用FormClosing事件,但我想直接FormClosing事件而不是在上述场景中留下事件。

为了让这项工作成功,我还需要添加什么样的休假活动?

1 个答案:

答案 0 :(得分:1)

删除LostFocus事件中的逻辑,将其放入单独的子例程中。创建一个间隔为10到100毫秒的计时器。在离开事件中开始。在计时器勾选事件处理程序中检查表单是否正在关闭,如果没有运行您的子例程。这是我所说的一个例子,如果您有很多控制事件需要拦截,这可以很快非常,并且您也将丢失EventHandlers中的EventArgs数据。

public partial class Form1 : Form
{
    private bool closing;
    public Form1()
    {
        InitializeComponent();
    }

    private void textBox1_Leave(object sender, EventArgs e)
    {
        timer1.Enabled = true;
    }

    private void TextBox1LeaveMethod()
    {
        textBox1.BackColor = Color.Red;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Enabled = false;
        if (!closing)
            TextBox1LeaveMethod();
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        closing = true;
    }
}