C# 绘制的边界在某些情况下运行

C# 绘制的边界在某些情况下运行,c#,graphics,drawrectangle,C#,Graphics,Drawrectangle,在我的工具中,我使用面板来更改页面。每个页面都有自己的面板,当我更改页面时,我会发送带有控件的面板。在用作画布的面板上,我有以下绘制事件: private void panelContent_Paint(object sender, PaintEventArgs e) { e.Graphics.CompositingQuality = CompositingQuality.HighQuality; e.Graphics.SmoothingMode

在我的工具中,我使用面板来更改页面。每个页面都有自己的面板,当我更改页面时,我会发送带有控件的面板。在用作画布的面板上,我有以下绘制事件:

    private void panelContent_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
        e.Graphics.SmoothingMode = SmoothingMode.HighQuality;

        // Paints a border around the panel to match the treeview control
        e.Graphics.DrawRectangle(Pens.CornflowerBlue,
            e.ClipRectangle.Left,
            e.ClipRectangle.Top,
            e.ClipRectangle.Width - 1,
            e.ClipRectangle.Height - 1);

        e.Graphics.Flush();

        base.OnPaint(e);
    }

此方法基本上在面板周围绘制了一个漂亮的边框,因此看起来更好。出于某种原因,当我将另一个窗体移到该面板上方时,构成边框的线条开始运行一点。偶尔也会从边界上画一些小的线。这个问题只发生了几秒钟,然后整个面板就会重新绘制。我能做些什么来防止这种情况发生吗?

ClipRectangle会告诉您需要重新绘制控件的哪个部分。如果你在上面移动物体,这可能是你的物体和被移动物体的交点。可以使用此信息更有效地重新绘制控件


您可能希望将矩形从0,0绘制到panelContent.Width-1,panelContent.Height-1。

的效果类似于符咒:private void panelContent\u Paintobject sender,painteventags e{e.Graphics.CompositingQuality=CompositingQuality.HighQuality;e.Graphics.SmoothingMode=SmoothingMode.HighQuality;e.Graphics.DrawRectanglePens.CornflowerBlue,0,0,panelContent.Width-1,panelContent.Height-1;e.Graphics.Flush、 base.OnPainte;}谢谢!