Question Problem in painting custom panel control (.Net Framework 4.0).

priyamtheone

Well-known member
Joined
Sep 20, 2007
Messages
96
Programming Experience
Beginner
I have inherited the standard panel control to create a panel having custom border color. The problem is, while the panel is on a form and any other form is moved across it, it paints hapazard lines of the same color as the panel custom border color, all throughout background of the panel. I tried to Refresh or Invalidate the panel in its paint event but of no avail. The same is happening while designing in the design editor too. See attached image. Why is this happening and how to get rid of it?
My code follows:

VB.NET:
Namespace CustomPanelControl
    Public Class CustomPanel
        Inherits Panel

        Public Sub New()
            MyBase.New()
        End Sub

        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(e)

            'Set the backcolor of the panel according to the focus on it.
            If Me.ContainsFocus Then
                Me.BackColor = Color.Yellow
            Else
                Me.BackColor = Color.White
            End If

            'Draw the border of the panel.
            If Me.BorderStyle = BorderStyle.None Then
                Dim borderWidth As Integer = 1
                Dim BorderColor As Color = Color.Blue
                ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, BorderColor, borderWidth, ButtonBorderStyle.Solid, BorderColor, borderWidth, ButtonBorderStyle.Solid, BorderColor, _
                borderWidth, ButtonBorderStyle.Solid, BorderColor, borderWidth, ButtonBorderStyle.Solid)
            End If
        End Sub
    End Class
End Namespace
 

Attachments

  • Normal.jpg
    Normal.jpg
    54.6 KB · Views: 43
  • DirtyWhileExecute.jpg
    DirtyWhileExecute.jpg
    84.2 KB · Views: 40
  • DirtyWhileDesign.jpg
    DirtyWhileDesign.jpg
    140.1 KB · Views: 43
The reason is you draw border for e.ClipRectangle, which may be just a small part of the control that has been invalidated for current paint event. Use for example the controls ClientRectangle property.
For more advanced painting the clip rectangle can be used to only redraw the invalidated area.
 

Latest posts

Back
Top