タスクマネージャー内で検出されなけ時にサポート
-
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;
}
}
}
だからいたいアプリケーションを終をクリックし、閉じるボタンのメッセージボックスを示すことができ、それを選びました。その後のライン。消=trueが実行され、フォームは閉じられるわけではありません。
現在のもので、これまり本規約の準拠法は日本法とタスクマネージャーのありの理由はUserClosing!!!なぜですか?なでTaskManagerClosing?
解決
私は、我々の独自の<のhrefによって答えとスレッドを見つけ= "https://stackoverflow.com/users/17034/nobugz"> nobugzするます:
その隣にWindowsフォームでは検出できません 近くの理由は、タスクから来ました マネージャー。自動的にそれはそう 並進CloseReason.Noneへ CloseReason.TaskManagerClosing。 あなたが近くにしようとした後に問題があり、 「X」で、CloseReasonはセットです UserClosingへとリセットを取得していません あなたが近くをキャンセルした場合Noneに戻って。 ずさんます。
そして、リフレクションを使用してNoneに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