Управляйте уровнем масштабирования WinForms, используя колесо прокрутки мыши и Ctrl в VB.NET - PullRequest
6 голосов
/ 01 марта 2011

Если у меня есть winform, могу ли я узнать, как я могу контролировать уровень масштабирования шрифта в приложении (а также, очевидно, самого окна приложения) с помощью Ctrl + колесико мыши?Я вижу, что в событии «Колесо прокрутки» есть Дельта, но не уверен, как это работает.Есть ли какой-нибудь пример кода, на который я могу посмотреть?

Большое спасибо за помощь!

Ответы [ 3 ]

6 голосов
/ 01 декабря 2011

Я подозреваю, что вы можете просто проверить:

(VB.NET):

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

(C #):

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

чтобы проверить, нажата ли клавиша управления.

5 голосов
/ 01 марта 2011

Вам придется обработать событие KeyDown и KeyUp, чтобы определить, удерживается ли клавиша Ctrl . Это значение должно храниться на уровне класса, поскольку оно будет использоваться другими подпрограммами, кроме событий KeyDown и KeyUp.

Затем вы пишете код для обработки события MouseWheel формы. Прокрутка вниз (к вам) приводит к отрицательному значению свойства Delta MouseEventArgs. Прокрутка вверх, очевидно, обратная. Значение свойства Delta всегда равно 120.

Microsoft объясняет это значение следующим образом:

В настоящее время значение 120 является стандартом для одного задержания. Если будут введены мыши с более высоким разрешением, определение WHEEL_DELTA может стать меньше. Большинство приложений должны проверять положительное или отрицательное значение, а не общую сумму.

В вашем контексте вы просто проверите знак Дельты и выполните действие.

Вот пример кода, реализующий базовую функциональность 'zoom':

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. MSDN: событие Control.KeyDown
  2. MSDN: событие Control.KeyUp
  3. MSDN: событие Control.MouseWheel
  4. MSDN: класс MouseEventArgs
0 голосов
/ 08 июня 2018

Для CrystalReportViewer1

Просто поместите CrystalReportViewer1.Zoom (ZoomValue) вместо строки Me.Text = ZoomValue.ToString () в Sub Zoom

...