VB.NET•Override OnPaint to Draw Photos and Maps

Listing 3. You must override the OnPaint event fired by the MyBase.Invalidate statement prior to painting the form with the image bitmap and overlaying optional gridlines to identify tile boundaries. This code redraws the image on the active area of the form and uses the System.Drawing.Imaging.DrawLine method to add white gridlines to photos and red gridlines to topo maps. You need additional code to add north-south and east-west image distance dimensions.

Protected Overrides Sub OnPaint( _
   ByVal e As PaintEventArgs)
   'Redraws the image every time the form is 
   'invalidated
   If Not (bmpImage Is Nothing) Then
      'Redraw the bitmap on the form and 
      'add tile gridlines, if selected
      Try
         e.Graphics.DrawImage(bmpImage, 0, _
            0, bmpImage.Width, bmpImage.Height)
         If mnuThemeGridlines.Checked Then 
            'Draw tile grid lines on image
            Dim penLines As Pen
            If blnIsTopoMap Then
               'Red pen on topo maps
               penLines = New Pen(Color.Red, 2)
            Else
               'White pen on photos
               penLines = New Pen(Color.White, 2)
            End If
            'Process the horizontal and 
            'vertical line arrays
            Dim intCtr As Integer
            For intCtr = 0 To _
               UBound(aptfLinesHor, 1)
               'Draw the horizontal lines
               e.Graphics.DrawLine(penLines, aptfLinesHor( _
                  intCtr, 0), aptfLinesHor(intCtr, 1))
            Next
            For intCtr = 0 To _
               UBound(aptfLinesVert, 1)
               'draw the vertical lines
               e.Graphics.DrawLine(penLines, _
                  aptfLinesVert(intCtr, 0), _
                  aptfLinesVert(intCtr, 1))
            Next intCtr
         End If
      Catch excPaint As Exception
         Dim strMsg As String = _
            "Error in overridden " & _
            "OnPaint event handler."
         MsgBox(strMsg + excPaint.StackTrace, _
            MsgBoxStyle.Exclamation, _
            "OnPaint Exception")
      End Try
   End If
End Sub