- PR -

[C#] Windows.Formでクローズチェックボックスの動作を修正したい

投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2005-09-22 14:52
通常はクローズチェックボックス(Formの右上端にあるチェックボックス)をクリックするとDispose()メソッドが実行されますが、例えばDispose()メソッドの代わりにHide()が実行されるように修正したい。
Dispose()メソッドの中身を丸ごとthis.Hide();に修正してしまうと外部からDispose()できなくなってしまいます。Dispose()もキチンと処理できるようにしつつ、クローズドチェックボックスの動作だけを修正したいのです。良い方法は無いでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-22 15:16
こんにちは、じゃんぬ です。

まず、ウィンドウの [閉じるボタン] で閉じる場合を捕捉しなくてはなりませんよね。
で、システム メニューからの「閉じる」と、[Alt] + [F4] などの区別もつけるのですか?


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-09-22 16:16
こんにちは。

WndProc() で WM_DESTORY を取得するとか。(未検証)
でも、こうしたらホントに終了する時に工夫がいりますね。WM_QUIT 投げるとかかな?
(ウィンドウメッセージ忘れかけなのでちょと不安^^
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-22 16:57
いや、Closing イベントの時点で Close 自体をやめて、
Hide してあげれば良い気がするんですが...

これなら、Dispose の考慮なんて要らないような...
読み間違えてる? > 私


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-09-22 17:04
引用:

いや、Closing イベントの時点で Close 自体をやめて、
Hide してあげれば良い気がするんですが



あ〜、そっか。済みません。「私が」いらん事言ったので「ずばりの」答えでちゃいましたね。^^;


[ メッセージ編集済み 編集者: 囚人 編集日時 2005-09-22 17:07 ]
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-09-22 17:20
引用:

Dispose()もキチンと処理できるようにしつつ、クローズドチェックボックスの動作だけを修正したいのです。
良い方法は無いでしょうか?



クローズドチェックボックスなんてものはありません。
クローズボックスあるいはクローズボタンが妥当な呼称です。

本題ですが、Form の Closing イベントで条件判定して必要なら e.Cancel = true した上で this.Hide() すればいんじゃないでしょうか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-22 17:54
こんにちは、じゃんぬ です。

引用:

囚人さんの書き込み (2005-09-22 17:04) より:

あ〜、そっか。済みません。
「私が」いらん事言ったので「ずばりの」答えでちゃいましたね。^^;


あ、わざとやっていたんですか... 気づきませんで... (;´・ω・`)
ついつい私が要らぬことをやってしまったみたいです。

# まあ、ひどりさんもズバリの答えを出してますし。(^^)

で、後は「判断」が残るわけですが、WM_SYSCOMMAND を捕捉して、
wParam が SC_CLOSE であれば OK ですね。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-22 18:05
あ、CancelEventArgs.Cancel = true; としたいならば、
Closing イベント内でやりたいですよね。

だとすると、スタックフレームかなぁ。
フォームが閉じられる原因を取得する

# あー、2005 だと Closing イベントに、
# ClosingReason があるから楽なんですけどねぇ。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)