当我调用form.dispose()
表单时总是调用Validating事件并显示MessageBox消息。
如何在form.dispose()
执行时阻止验证事件不会触发。我在验证事件中有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");
}
}
答案 0 :(得分:3)
一个简单的解决方案是:
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();
}
}
答案 1 :(得分:2)
您是否有理由在表单上显式调用Dispose()?
在关闭表单之前,不应该调用Dispose()。这使您有机会在OnClosing或OnClosed事件上处理任何所需的验证,并禁用进一步的验证和消息框。
关于您的代码的备注: