質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top