イベントを抑止させる方法

解決


らy  2004-03-31 13:37:58  No: 82795  IP: [192.*.*.*]

VB6.0で開発しています。
フォームロード時に、チェックボックスをTrueにするのですが、
その時に、チェックボックスのクリックイベントが走らない
ようにする方法はありますでしょうか。

ExcelVBAでは、イベント抑止する方法として、「EnableEvents」
というものがありますが・・。VBではこれに似通ったものが
探しても見つかりませんでした。

回避策として、フラグを持たせて、それで判別するといった方法も
あるのですが、気になるので聞いて見たいと思います。
初心者の質問で申し訳ないですが、ご教授よろしくお願いします。

編集 削除
nanashi  2004-03-31 14:24:42  No: 82796  IP: [192.*.*.*]

フラグしかないと思います。

編集 削除
たかみちえ  URL  2004-03-31 15:01:52  No: 82797  IP: [192.*.*.*]

気になってちょっと調べてみたのですが、興味深いことがわかりました。
Delphiという言語には、VBのコントロールのようなものを実装する手段として、VCLというものが使われています。
これも質問の件と同じように、チェックボックスのCheck遷移時にイベントが発生してしまいます。

  さて本題。VCLは商用エディションに限りソースが公開されています。この質問を気にそのソースを調べてわかったのですが、チェックボックスのチェックをWindowsに指示した直後に、Clickイベントを起こす命令が書かれていました。

  よって、Windowsのコントロールであるチェックボックス(VBがラッピングしてるコントロール自体ではなく)は、チェックを遷移する際に、クリックイベントが起こる仕様には(WM_LBUTTONDOWNなどが送られてくる仕様には)なっていないのではないかと言うことです。

  前フリが長くなりました。新事実を見つけたあとはついこうなるので勘弁してください(^^ゞ
SendMessageで直接、チェックボックスのチェック遷移を促すメッセージ
BM_SETCHECK を送ってみてはどうでしょうか?
おそらくVBが、メッセージを直接送った際の動作までラッピングしているとはおもえませんので、大丈夫ではないかと思いますが…。
(無理ならAPIで自作するとか、チェックボックス風のコントロールを自作する必要があるかもしれません)

編集 削除
たかみちえ  URL  2004-03-31 15:21:29  No: 82798  IP: [192.*.*.*]

ああそうそう、上の方法だと、VBから(プロパティを使って)チェックボックスの状態を取得しようとしたとき、現在の状態とずれが生じるかもしれません。

編集 削除
nanashi  2004-03-31 16:41:48  No: 82799  IP: [192.*.*.*]

たかみちえさん

面白そうだったんで試してみましたが、通常の挙動と同様にClickイベントが発生しました。

編集 削除
らY  2004-03-31 16:58:05  No: 82800  IP: [192.*.*.*]

返答、ありがとうございます!
だいぶ、API関数に不慣れなもので・・先ほど、やっと確認できました。
やっぱイベント発生しちゃいますね。
自作するには、ちょっと時間がかかりそうなので^^;
やはりフラグを使用しようと思います。
勉強になりました。どうもありがとうございました^^

編集 削除