|
■No94254 (paison さん) に返信 > Private Sub DateTimePicker1_MouseWheel(sender As Object, e As MouseEventArgs)
通常であれば、イベントハンドラは Private Sub DateTimePicker1_MouseWheel(sender As Object, e As MouseEventArgs) Handles DateTimePicker1.MouseWheel あるいは Private Sub DateTimePicker1_MouseWheel(sender As Object, e As MouseEventArgs) Handles DateTimePicker1.MouseWheel, DateTimePicker2.MouseWheel などの形式になっているはずです。 AddHandler による動的割り当てを行っているのでしょうか?
> の中のコードにブレイクポイントを付けた状態で起動すると > ホイールを回した時に、プログラムとマウスカーソルがフリーズしてしまいます。 コードウィンドウで [F5] を押せば再開できるはずですが、 フリーズする状況は再現できませんでした。
> 一体、どうすればこのような現象が出なくなりますでしょうか? 提示頂いた情報だけでは、再現テストを行えません。 新規プロジェクトを作成し、現象を再現可能な最小限のコードを作って提示することはできますか?
一応、SendKeys を使わないバージョンも置いておきます。 Public Class DateTimePickerWithWheel Inherits DateTimePicker Protected Overrides Sub OnMouseWheel(e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseWheel(e) Dim msgU As Message Dim msgD As Message If e.Delta > 0 Then msgU = Message.Create(Handle, &H100, New IntPtr(Keys.Up), New IntPtr(&H1480001)) msgD = Message.Create(Handle, &H101, New IntPtr(Keys.Up), New IntPtr(&HC1480001)) Else msgU = Message.Create(Handle, &H100, New IntPtr(Keys.Down), New IntPtr(&H1500001)) msgD = Message.Create(Handle, &H101, New IntPtr(Keys.Down), New IntPtr(&HC1500001)) End If MyBase.WndProc(msgU) MyBase.WndProc(msgD) End Sub End Class
既存のコントロールを継承コントロールに置き換えできない事情がある場合は、 NativeWindow クラスで WndProc を捕らえて、WM_MOUSEWHEEL(&H020A) が飛んできた時に 同じように WM_KEYUP(&H100) と WM_KEYDOWN(&H101) を投げつけることでも実装できそう。
|