  Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
    ' Cel: ta procedura zasłania zdarzenie OnPaint() 
    '      do rysowania wskaźnika
    '
    ' Lista argumentów:
    '  e       argumenty zdarzenia rysowania
    '
    ' Zwracana wartość:
    '  niedostępna 
    '
    ' OSTRZEŻENIE: Kod napisany w takiej postaci zakłada, że 
    '      wartości dla mTop, mLeftSide, mTall i mWide są poprawne. 
    '      Żadne ich zmiany nie są wykonywane.

    Dim Canvas As Graphics = e.Graphics
    Dim MyPen As Pen = New Pen(Color.Black)
    Dim MyBrush As SolidBrush = New SolidBrush(Color.Green)
    Dim MyStyle As FontStyle = FontStyle.Regular
    Dim MyFont As Font = New Font("Microsoft Sans Serif", 8, MyStyle)
    Dim NumberOffset As Integer, buff As String
    Dim TickOffset As Integer, TopOffset As Integer, TickValues As Double
    Dim i As Integer

    SetGaugeParameters()         ' Liczymy kilka wartości początkowych

    If mCaution <> 0 Or mDanger <> 0 Then ' Ustawiamy żółtą 
                                          ' lub czerwoną linię?
      If mCurrent >= mCaution Then      ' Sprawdzamy, czy wartość wymaga
                                        ' zmiany koloru
        MyBrush.Color = Color.Yellow
      End If
      If mCurrent >= mDanger Then
        MyBrush.Color = Color.Red
      End If
    End If

    ' Rysujemy czworokąt i wypełniamy go kolorem tła
    Canvas.DrawRectangle(MyPen, mLeftSide, mTopSide, mWide, mTall)
    Canvas.FillRectangle(MyBrush, mLeftSide + 1, mTopSide + 1, _ 
            mWide - 1, mTall - 1)

    MyBrush.Color = Color.Black      ' Resetujemy kolor pędzla dla liczb

    TickOffset = mWide + mLeftSide
    TickValues = mMax
    NumberOffset = MyFont.GetHeight(Canvas) / 2

    For i = 0 To 4            ' Rysujemy znaki kontrolne i wartości skali
      TopOffset = mTopSide + i * mGap  ' Najpierw rysujemy 
                                       ' znaki kontrolne
      Canvas.DrawLine(MyPen, TickOffset, TopOffset, _ 
                TickOffset + 3, TopOffset)
      buff = Format(TickValues - mTick * i, ".00")  
                ' Teraz rysujemy wartości skali 
      Canvas.DrawString(buff, MyFont, MyBrush, TickOffset + 5, _
                      TopOffset - NumberOffset)
    Next i

    ' Jest to potrzebne z powodu możliwości wystąpienia błędów 
    ' zaokrąglania dla wartości pikseli podczas rysowania 
    ' znaku kontrolnego dla wartości minimalnej. 
    ' To rysuje znak kontrolny minimum i jego wartość
    Canvas.DrawLine(MyPen, TickOffset, mTopSide + mTall, TickOffset + 3, _
                 mTopSide + mTall)
    Canvas.DrawString(CStr(mMin), MyFont, MyBrush, TickOffset + 5, _
                 mTopSide + mTall - NumberOffset)

    ' Teraz rysujemy wypełniony czworokąt dla nieużywanej 
    ' części wskaźnika za pomocą białego pędzla

    MyBrush.Color = Color.White

    ' To określa, jak „głęboko” narysować nowy czworokąt. Dostosowanie 
    ' przez +/- 1 piksel jest po to, aby nie zasłaniać brzegu wskaźnika 

    i = (1.0 - mCurrent / mRange) * mTall + (mMin / mRange) * mTall - 1
    Canvas.FillRectangle(MyBrush, mLeftSide + 1, mTopSide + 1, _ 
          mWide - 1, i)

  End Sub
