任务经理接近是不是检测第二次在一个它应用
-
23-09-2019 - |
题
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
if (MessageBox.Show(this, "Do you really want to close?", "Close?",
MessageBoxButtons.YesNo) == DialogResult.No)
{
e.Cancel = true;
}
}
}
所以当我想关闭程序击闭按钮的消息框所示,因为它应该,那么我选择了没有。那么线e。取消=true执行和形式不是封闭的。
现在事情是,在此之后,如果我闭上应用程序任务经理关闭的原因是UserClosing!!!为什么?它不应该被TaskManagerClosing?
解决方案
Windows窗体不能检测到 从任务关闭原因来 经理。因此,它会自动 翻译CloseReason.None到 CloseReason.TaskManagerClosing。 问题是,一旦你试图关闭 与“X”时,CloseReason是集 到UserClosing并没有得到复位 回无如果取消关闭。 马虎。
和它旁边,通过关于如何e.CloseReason的值更改为无使用反射(因为它是只读的),给另一用户的解释工作解决此问题(这应该被设置e.Cancel当施加为True):
FieldInfo fi = typeof(Form).GetField("closeReason", BindingFlags.Instance | BindingFlags.NonPublic);
fi.SetValue(this, CloseReason.None);
其他提示
看看 答案 这个问题,它使用 CloseReason.TaskManagerClosing
抓到一样的。
就在VB中的你的代码翻译:
Imports System.Reflection
Private Sub ResetCloseReason()
Dim myFieldInfo As FieldInfo
Dim myType As Type = GetType(Form)
myFieldInfo = myType.GetField("closeReason", BindingFlags.NonPublic Or _
BindingFlags.Instance Or BindingFlags.Public)
myFieldInfo.SetValue(Me, CloseReason.None)
End Sub
不隶属于 StackOverflow