2012-02-22 8 views
3

C#WindowsフォームでFormClosingイベントを使用して、終了前に確認するようユーザーに依頼しています。ユーザーがフォームウィンドウの隅に赤い十字を使用してフォームを閉じている場合にのみ、このメッセージを表示します。手動でフォームを閉じるか非表示にすると、確認メッセージを表示したくない(たとえば、手動でform.Close()を呼び出すなど)。C#WinFormが閉じられているかどうかを確認する

ユーザーが赤い十字を押したかどうかを確認できますか?

ありがとうございました。

+0

新しいフォームを開くためのボタンがあります(form.Close()を使用して)その前のフォームを閉じます。したがって、ユーザーに確認を求めるメッセージが表示されます。申し訳ありませんが、私はこれを明確にしませんでした。 – Jpin

+1

@ Yuck:これは技術的な質問であり、デザインに関するあなたの意見はないと想像してください。 –

答えて

0

FormClosingイベントに渡されたイベント引数のCloseReasonプロパティを確認できます。

0

FormClosingイベントハンドラを使用して、この単純なコード置く:箱から出して

 if (MessageBox.Show(this, "Do you want to close the Application?", "Exit App", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) 
     { 
      e.Cancel = true; 
     } 
     else 
     { 
      //close app code 
     } 
0

を、行動のこの種を検出するための簡単な方法はありません。 FormClosingイベントで確認できる「FormClosingEventArgs.CloseReason」プロパティがありますが、実際に閉じる理由を特定することはできません。

MSDNから、「UserClosing」列挙値の説明は次のとおり

ユーザであるフォームウィンドウの閉じるボタンをクリックして 例えば、ユーザインタフェース(UI)を介してフォームを閉じますウィンドウのコントロールメニューから を閉じるか、またはAlt + F4を押して選択します。

あなたが見ることができるように、多くの理由が記載されていますが、具体的な理由はありません。

あなたがしようとしているのは、ウィンドウの境界線(ボタンを含む)を削除し、自分の閉じるボタンを配置し、クリックイベントをキャッチして、私はそれが以前に行われていることを見てきましたが、正常に動作しますが、通常のウィンドウボタンと同じようには見えないかもしれません。

2

this.Close()をプログラムで呼び出すか、ユーザーにXをクリックさせると、有効なチェックではないので、CloseReason.UserClosingが得られます。

OnClosingにnullというパラメータが渡された場合、基本的にthis.Closeを呼び出す "ハッピーな"ソリューションについては、下のコードを参照してください。

private void button1_Click(object sender, EventArgs e) 
{ 
    OnClosing(null); 
} 
protected override void OnClosing(CancelEventArgs e) 
{ 
    if (e == null) 
    { 
     // Raise your Message or Cancel 
     this.Close(); 
    } 
    else 
    { 
     base.OnClosing(e); 
    } 
} 
+0

はthis.Dispose()を開いているフォームを閉じるのに悪い方法を使用していますか?私は再びフォームに入っている情報は必要としませんが、アプリケーションの後半で別の情報を使ってフォームを再度使用することができます(レイアウトを再利用するだけです)。 – Jpin

+0

通常、this.Dispose()は内部的に.Close()を呼び出します。 – Alex

+0

this.Dispose()は "UserClosing"で分類されませんでした。あなたに助けてくれてありがとう:) – Jpin

関連する問題