6

WinFormを使用している場合、Ctrl +マウスのスクロールホイールを使用して、アプリケーション(およびアプリケーションウィンドウ自体)のフォントのズームレベルを制御する方法を知っていますか?スクロールホイールイベントにデルタがあるようですが、それがどのように機能するかはわかりません。調べることができるコードサンプルはありますか?

4

3 に答える 3

6

私はあなたがただテストすることができると思う:

(VB.NET):

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

(C#):

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

コントロールキーが押されているかどうかを確認します。

于 2011-12-01T14:33:47.527 に答える
5

キーが押されているかどうかを判断するにはKeyDown、イベントを処理する必要があります。この値は、およびイベント以外の他のサブルーチンによって使用されるため、クラスレベルで保存する必要があります。KeyUpCtrlKeyDownKeyUp

次に、フォームのMouseWheelイベントを処理するコードを記述します。下に(手前に)スクロールすると、のDeltaプロパティに負の値が発生しますMouseEventArgs。上にスクロールするのは明らかに逆です。Deltaプロパティの値は現在常に120です。

この値のMicrosoftの理由は次のとおりです。

現在、120の値が1つの戻り止めの標準です。より高解像度のマウスが導入されると、WHEEL_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. MSDN:Control.KeyDownイベント
  2. MSDN:Control.KeyUpイベント
  3. MSDN:Control.MouseWheelイベント
  4. MSDN:MouseEventArgsクラス
于 2011-03-01T10:43:41.280 に答える
0

CrystalReportViewer1の場合

サブズームにMe.Text=ZoomValue.ToString()という行の代わりにCrystalReportViewer1.Zoom(ZoomValue)を配置するだけです。

于 2018-06-07T21:54:45.450 に答える