作成日: 2024/12/11 最終更新日: 2026/1/14
文書種別
制限事項
状況
回避方法あり
詳細
GcCalendarコントロールでNavigateOnWheelModeプロパティをDisableに設定してマウスホイールの動作を無効化します。この状態でアプリケーションを実行すると、GcCalendarコントロールにフォーカスがある場合にはマウスホイールによってページが移動しなくなりますが、GcCalendarコントロールにフォーカスがない場合にマウスホイールによってページが移動します。
本来の仕様では、フォーカスの有無にかかわらずページが移動しないことを想定しています。 しかし、Windows 10以降では「ホバーしたときに非アクティブウィンドウをスクロールする」設定がデフォルトで有効になっており、この設定が有効な場合、OSがマウスホイールのメッセージを直接ホバー中のウィンドウへルーティングします。 その結果、NavigateOnWheelModeプロパティは期待どおりに機能しません。具体的には、HoverとAlwaysが同じ動作となり、Disableを設定してもマウスホバー中はスクロールが発生します。
本来の仕様では、フォーカスの有無にかかわらずページが移動しないことを想定しています。 しかし、Windows 10以降では「ホバーしたときに非アクティブウィンドウをスクロールする」設定がデフォルトで有効になっており、この設定が有効な場合、OSがマウスホイールのメッセージを直接ホバー中のウィンドウへルーティングします。 その結果、NavigateOnWheelModeプロパティは期待どおりに機能しません。具体的には、HoverとAlwaysが同じ動作となり、Disableを設定してもマウスホバー中はスクロールが発生します。
回避方法
Windows 10の場合、設定>デバイス>マウス>「ポイントしたときに非アクティブウィンドウをスクロールする」をオフにします。
Windows 11の場合、設定>Bluetoothとデバイス>マウス>「ホバーしたときに非アクティブウィンドウをスクロールする」をオフにします。
Windows 11の場合、設定>Bluetoothとデバイス>マウス>「ホバーしたときに非アクティブウィンドウをスクロールする」をオフにします。
または、以下のようにMouseWheelイベントを取得してフォーカスがない時の動作を上書きします。
◎サンプルコード(VB)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
GcCalendar1.NavigateOnWheelMode = GrapeCity.Win.Calendar.NavigateOnWheelMode.Disable
' 回避策
AddHandler GcCalendar1.MouseWheel, AddressOf GcCalendar1_MouseWheel
End Sub
' 回避策
Private Sub GcCalendar1_MouseWheel(sender As Object, e As MouseEventArgs)
If Not GcCalendar1.Focused Then
Dim handledArgs As HandledMouseEventArgs = DirectCast(e, HandledMouseEventArgs)
handledArgs.Handled = True
End If
End Sub