[環境] VB.NET2003 on WindowsXP-SP2
MonthCalendar コントロールを配置したフォームを作り、フォームを開いた状態で放っておくと、
MonthCalendar の DateChanged イベントが定期的(2分ごと)に発生します。
この動作は MonthCalendar コントロールの仕様でしょうか?
仕様ではないなら、イベントを発生させないようにするにはどうすればよいでしょうか?
よろしくお願いします。
断りのないマルチポストは、自分のためにもやめておくべきでしょう。
http://www7.big.or.jp/~pinball/discus/vb/59477.html
結構ヒットしますが、何故かはわかりません。
http://www.google.co.jp/search?hl=ja&q=MonthCalendar+DateChanged+trouble&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
一応見っけ、これでいいかどうか試してないが、
http://66.102.7.104/search?q=cache:l2VsHVe1VvgJ:www.windowsforms.net/Forums/ShowPost.aspx%3FtabIndex%3D1%26tabId%3D41%26PostID%3D5522+MonthCalendar++DateChanged+problem&hl=ja
ちなみにコレ、newsgourp等でも、昔から問題になっていた問題で、
実は VB6 の MonthView でも再現したりします。
(きっちり2分間隔でSelChangeイベントが発生する)
なので、.NETの問題というよりも、Windowsのコモンコントロール側に
原因があるという感じです。一体何なのでしょうね。
# MonthViewでの事例は、ここの過去ログにもあります。
なお、Spy++で監視していると、120秒間隔でタイマーメッセージが……。
[POST] WM_TIMER, wParam=2, lParam=0(wTimerID=2, tmprc=0)
[SEND] 0x204E(WM_USER+7246), wParam=0, lParam=0012FB14
ちょっとネタっぽくなりますけど
1分に一回くらいKillTimer呼び出すとか
MonthCalendarに使えるかどうかは調べてませんが。
Timer自体は当日の赤丸を更新するために2分ごとにマシン日付を
チェックするために発生しているので、まぁ仕様の範疇かと思います。
問題はそのタイミングでSelChange(確認したのがVB6なので)が
だだ漏れで発生しちゃう部分ですね。
なんかこれ単純なCommonControlのバグっぽいので、
突き止めるんならデバッグ用Windows環境立ててデバッグトレース
していくしかないかも。
VB6上での解決策で一番ツカえそぅだったのはこちら。
http://www.tech-archive.net/Archive/VB/microsoft.public.vb.controls/2004-05/0361.html
最初の質問に戻って、ユーザが明示的に操作した時にだけイベントを
発生させたいなら、DateChangedではなくDateSelectedなどいかがでしょう。
ツイート | ![]() |