- - PR -
[C#] Windows.Formでクローズチェックボックスの動作を修正したい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-09-22 14:52
通常はクローズチェックボックス(Formの右上端にあるチェックボックス)をクリックするとDispose()メソッドが実行されますが、例えばDispose()メソッドの代わりにHide()が実行されるように修正したい。
Dispose()メソッドの中身を丸ごとthis.Hide();に修正してしまうと外部からDispose()できなくなってしまいます。Dispose()もキチンと処理できるようにしつつ、クローズドチェックボックスの動作だけを修正したいのです。良い方法は無いでしょうか? | ||||
|
投稿日時: 2005-09-22 15:16
こんにちは、じゃんぬ です。
まず、ウィンドウの [閉じるボタン] で閉じる場合を捕捉しなくてはなりませんよね。 で、システム メニューからの「閉じる」と、[Alt] + [F4] などの区別もつけるのですか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-09-22 16:16
こんにちは。
WndProc() で WM_DESTORY を取得するとか。(未検証) でも、こうしたらホントに終了する時に工夫がいりますね。WM_QUIT 投げるとかかな? (ウィンドウメッセージ忘れかけなのでちょと不安^^ | ||||
|
投稿日時: 2005-09-22 16:57
いや、Closing イベントの時点で Close 自体をやめて、
Hide してあげれば良い気がするんですが... これなら、Dispose の考慮なんて要らないような... 読み間違えてる? > 私 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-09-22 17:04
あ〜、そっか。済みません。「私が」いらん事言ったので「ずばりの」答えでちゃいましたね。^^; [ メッセージ編集済み 編集者: 囚人 編集日時 2005-09-22 17:07 ] | ||||
|
投稿日時: 2005-09-22 17:20
クローズドチェックボックスなんてものはありません。 クローズボックスあるいはクローズボタンが妥当な呼称です。 本題ですが、Form の Closing イベントで条件判定して必要なら e.Cancel = true した上で this.Hide() すればいんじゃないでしょうか。 | ||||
|
投稿日時: 2005-09-22 17:54
こんにちは、じゃんぬ です。
あ、わざとやっていたんですか... 気づきませんで... (;´・ω・`) ついつい私が要らぬことをやってしまったみたいです。 # まあ、ひどりさんもズバリの答えを出してますし。(^^) で、後は「判断」が残るわけですが、WM_SYSCOMMAND を捕捉して、 wParam が SC_CLOSE であれば OK ですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-09-22 18:05
あ、CancelEventArgs.Cancel = true; としたいならば、
Closing イベント内でやりたいですよね。 だとすると、スタックフレームかなぁ。 フォームが閉じられる原因を取得する # あー、2005 だと Closing イベントに、 # ClosingReason があるから楽なんですけどねぇ。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |