使用鼠标滚轮和VB.NET中的Ctrl控制WinForms的缩放级别

时间:2011-03-01 01:47:54

标签: vb.net winforms scroll zoom ctrl

如果我有一个winform,我是否可以通过Ctrl +鼠标滚轮来了解如何控制应用程序中字体的缩放级别(以及应用程序窗口本身)?我看到Scroll Wheel事件中有一个Delta,但不确定它是如何工作的。我可以查看一下代码示例吗?

非常感谢所有人的帮助!

3 个答案:

答案 0 :(得分:5)

您必须处理KeyDownKeyUp事件才能确定 Ctrl 键是否被按下。此值应存储在类级别,因为除了KeyDownKeyUp事件之外,其他子例程将使用它。

然后编写代码来处理表单的MouseWheel事件。向下滚动(朝向您)会导致MouseEventArgs的{​​{3}}属性的负值。向上滚动显然是相反的。 Delta属性的值始终为120.

微软此值的原因如下:

  

目前,值为120是一个制动器的标准。如果引入更高分辨率的鼠标,WHEEL_DELTA的定义可能会变小。大多数应用程序应检查正值或负值而不是总计。

在您的上下文中,您只需检查Delta的符号并执行操作。

以下是实现基本“缩放”功能的示例代码:

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

请阅读以下内容,了解有关您的问题的更多信息:

  1. Delta
  2. MSDN: Control.KeyDown Event
  3. MSDN: Control.KeyUp Event
  4. MSDN: Control.MouseWheel Event

答案 1 :(得分:5)

我怀疑你可以测试一下:

(VB.NET):

If (ModifierKeys And Keys.Control) = Keys.Control Then

(C#):

if( (ModifierKeys  & Keys.Control) == Keys.Control )

检查控制键是否关闭。

答案 2 :(得分:0)

对于CrystalReportViewer1

刚刚放入CrystalReportViewer1.Zoom(ZoomValue) 而不是Sub Zoom

中的Me.Text = ZoomValue.ToString()行