WinFormを使用している場合、Ctrl +マウスのスクロールホイールを使用して、アプリケーション(およびアプリケーションウィンドウ自体)のフォントのズームレベルを制御する方法を知っていますか?スクロールホイールイベントにデルタがあるようですが、それがどのように機能するかはわかりません。調べることができるコードサンプルはありますか?
3 に答える
私はあなたがただテストすることができると思う:
(VB.NET):
If (ModifierKeys And Keys.Control) = Keys.Control Then
(C#):
if( (ModifierKeys & Keys.Control) == Keys.Control )
コントロールキーが押されているかどうかを確認します。
キーが押されているかどうかを判断するにはKeyDown
、イベントを処理する必要があります。この値は、およびイベント以外の他のサブルーチンによって使用されるため、クラスレベルで保存する必要があります。KeyUp
CtrlKeyDown
KeyUp
次に、フォームの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
質問の詳細については、以下をお読みください。
CrystalReportViewer1の場合
サブズームにMe.Text=ZoomValue.ToString()という行の代わりにCrystalReportViewer1.Zoom(ZoomValue)を配置するだけです。