Vas a tener que controlar el evento KeyDown
y KeyUp
con el fin de determinar si o no Ctrl clave está siendo presionado. Este valor debe almacenarse a nivel de clase porque será utilizado por otras subrutinas además de los eventos KeyDown
y KeyUp
.
Luego, escribe el código para manejar el evento MouseWheel
del formulario. Desplazarse hacia abajo (hacia usted) causa un valor negativo para la propiedad Delta
del MouseEventArgs
. Desplazarse hacia arriba es, obviamente, al revés. El valor de la propiedad Delta siempre es actualmente motivo 120.
de Microsoft para este valor es el siguiente:
Actualmente, un valor de 120 es el estándar para un fiador. Si se introducen ratones de mayor resolución, la definición de WHEEL_DELTA podría reducirse. La mayoría de las aplicaciones deben verificar un valor positivo o negativo en lugar de un total agregado.
En su contexto, solo comprobará la señal del Delta y realizará una acción.
Aquí hay un código de ejemplo la implementación básica 'zoom' funcionalidad:
Public Class Form1
Enum ZoomDirection
None
Up
Down
End Enum
Dim CtrlIsDown As Boolean
Dim ZoomValue As Integer
Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
ZoomValue = 100
End Sub
Private Sub Form1_KeyDown_KeyUp(ByVal sender As Object, _
ByVal e As KeyEventArgs) _
Handles Me.KeyDown, Me.KeyUp
CtrlIsDown = e.Control
End Sub
Private Sub Form1_MouseWheel(ByVal sender As Object,
ByVal e As MouseEventArgs) _
Handles Me.MouseWheel
'check if control is being held down
If CtrlIsDown Then
'evaluate the delta's sign and call the appropriate zoom command
Select Case Math.Sign(e.Delta)
Case Is < 0
Zoom(ZoomDirection.Down)
Case Is > 0
Zoom(ZoomDirection.Up)
Case Else
Zoom(ZoomDirection.None)
End Select
End If
End Sub
Private Sub Zoom(ByVal direction As ZoomDirection)
'change the zoom value based on the direction passed
Select Case direction
Case ZoomDirection.Up
ZoomValue += 1
Case ZoomDirection.Down
ZoomValue -= 1
Case Else
'do nothing
End Select
Me.Text = ZoomValue.ToString()
End Sub
End Class
leer en el siguiente para obtener más información acerca de su pregunta:
- MSDN: Control.KeyDown Event
- MSDN: Control.KeyUp Event
- MSDN: Control.MouseWheel Event
- MSDN: MouseEventArgs Class
¡Muchas gracias por su respuesta detallada! ¡Esto tiene todo lo que estaba buscando! – AZhu
@zhuanyi: My Pleasure ... –
Solo un problema ... por alguna razón mi código parece ser capaz de capturar los movimientos del mouse pero no la tecla abajo y la parte de la tecla a menos que use el mouse para hacer clic en el formulario primero ... ¿eso es lo esperado o simplemente estoy haciendo algo tonto? – AZhu