How to fire DicomViewer's MouseWheel event

Contents

COM Version of DicomObjects

It is really simple to get DicomViewer's MouseWheel event fired. First of all you need to set the DicomViewer's UseMouseWheel property to true, as the default value is false. You can change this property either via the designer panel or in your code. Once you have changed it, create the DicomViewer's MouseWheel event and put your code in there to handle mousewheel. It will fire every time you scroll the mouse.

Please note the Delta parameter is +120 if you scroll up the mousewheel and -120 if you scroll down. This gives you something to tell how the mousewheel was scrolled so that you can handle it properly.

Private Sub DicomViewer1_MouseWheel(ByVal Shift As Long, ByVal Delta As Integer, ByVal x As Long, ByVal y As Long)
   ' Delta is 120 if mousewheel scrolled UP once
   ' Delta is -120 if mousewheel scrolled DOWN once    
   Label1.Caption = "Delta Value is: " & Delta & " X is: " & x & " Y is: " & y
End Sub

One thing to note, the MouseWheel event will keep getting fired even when the mouse pointer is moved outside the Viewer's display area. This is because the Viewer is still having the focus and thus active. This is a normal Windows behaviour and for a quick workaround, you can set DicomViewer’s UseMouseWheel property to false in DicomViewer’s Container (normally a DForm)’s MouseMove (Better if you have MouseEnter) event. And in the Viewer’s MouseMove event you set Viewer’s UseMouseWheel back to true. This will give you a result that MouseWheel only fires when you scroll within the viewer’s area.

.NET Version of DicomObjects

Unlike the COM version, in .NET version of DicomObjects the DicomViewer control's MouseWheel event cannot be seen from the Event list on the properties panel. You have to do the coding yourself to hook the MouseWheel event.

VB.NET

Private Sub DicomViewer1_MouseWheel(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles   
                                    DicomViewer1.MouseWheel
   ' Whatever you like to do here with Delta
   MsgBox(e.Delta.ToString)
End Sub

C#

Declare the event, somewhere at the startup of your program:

dicomViewer1.MouseWheel += new MouseEventHandler(dicomViewer1_MouseWheel);

And then the event itself:

void dicomViewer1_MouseWheel(object sender, MouseEventArgs e)
{
  ' Whatever you like to do here with Delta
   MessageBox.Show(e.Delta.ToString());
}

When you have multiple DicomViewer on the Form

You will need to explicitly set focus on the DicomViewer control which the mouse pointer has entered, to enable the MouseWheel event on that Viewer. The MouseEnter event is probably a good place to set the focus:

VB.NET

Private Sub Viewer1_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Viewer1.MouseEnter
   Viewer1.Focus()
End Sub

C#

private void Viewer1_MouseEnter(object sender, EventArgs e)
{
    Viewer1.Focus();
}
Relevance: