当我调用form.dispose()表单时,总是调用Validating事件并显示MessageBox消息。
我如何防止在执行form.dispose()时不会触发Validating事件。我在Validating事件中具有MessageBox.Show()消息,因此在执行form.Dispose()时它们始终位于最前面。

甚至有可能防止退出吗?我正在使用紧凑型框架3.5

码:

public static void Close<T>(string formName) where T : Form
{
    Form f = null;
    if (Dict.TryGetValue(formName, out f))
    {
        Dict.Remove(formName);
        f.Dispose();
    }
}


和验证事件

private void acPredmetObravnave_Validating(object sender, CancelEventArgs e)
{
   if (....)
   {
       MessageBox.Show("Error");
   }
}

最佳答案

一个简单的解决方案是:

public class MyForm: Form
{
    public InternalClose = false;

    // Your code...


    private void acPredmetObravnave_Validating(object sender, CancelEventArgs e)
    {
        if (InternalClose ) return;
        if (....) MessageBox.Show("Error");
    }
}


然后

public static void Close<T>(string formName) where T : MyForm
{
    MyForm f = null;
    if (Dict.TryGetValue(formName, out f))
    {
        Dict.Remove(formName);
        f.InternalClose = true;
        f.Close();
        f.Dispose();
    }
}

10-08 05:02