在VB.NET中使用鼠标滚轮和Ctrl控制WinForms的缩放级别
问题描述:
如果我有一个winform,我可以知道如何控制应用程序中字体的缩放级别(以及显然的应用程序窗口本身)通过使用Ctrl +鼠标滚轮?我发现滚轮事件中有一个Delta,但不知道这是如何工作的。有没有我可以查看的代码示例?在VB.NET中使用鼠标滚轮和Ctrl控制WinForms的缩放级别
非常感谢所有的帮助!
答
您必须处理KeyDown
和KeyUp
事件,以确定是否按住Ctrl键。此值应存储在类级别,因为除了KeyDown
和KeyUp
事件之外,其他子例程都会使用此值。
然后您编写代码来处理表单的MouseWheel
事件。向下滚动(朝向您)导致MouseEventArgs
的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
阅读下列关于你的问题的更多信息:
答
我怀疑,你可以测试:
(VB.NET):
If (ModifierKeys And Keys.Control) = Keys.Control Then
(C#):
if((ModifierKeys & Keys.Control) == Keys.Control)
检查,如果控制键是下。
非常感谢这样详细的答案!这就是我一直在寻找的一切! – AZhu 2011-03-02 14:46:33
@ zhuanyi:我的快乐... – 2011-03-02 16:12:57
只是一个问题,虽然...由于某种原因,我的代码似乎能够捕获鼠标移动,但没有按键和键部分,除非我使用鼠标点击表单第一......是预期的还是我只是在做一些愚蠢的事情? – AZhu 2011-03-02 19:27:24