如果我有一个winform,我是否可以通过Ctrl +鼠标滚轮来了解如何控制应用程序中字体的缩放级别(以及应用程序窗口本身)?我看到Scroll Wheel事件中有一个Delta,但不确定它是如何工作的。我可以查看一下代码示例吗?
非常感谢所有人的帮助!
答案 0 :(得分:5)
您必须处理KeyDown
和KeyUp
事件才能确定 Ctrl 键是否被按下。此值应存储在类级别,因为除了KeyDown
和KeyUp
事件之外,其他子例程将使用它。
然后编写代码来处理表单的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 :(得分: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()行