展开Winform窗口时,虚线矩形显示为实线

时间:2009-04-17 02:25:45

标签: c# winforms gdi+ paint

我在使用自定义绘制虚线矩形时遇到GDI +问题。

当窗口大小增加或向上/向下滚动时,虚线矩形的垂直部分显示为实线,连续线条。更快地移动鼠标会导致实体部分越来越少。奇怪的是,水平线没有表现出这种行为,并且按预期显示。

到目前为止,已有两个非最佳解决方案设置ResizeRedraw = true或在Invalidate()OnResize()期间调用OnScroll()。我当然希望避免这种情况,因为我真正绘制的内容更复杂,而这些缓慢的调用会破坏流畅的体验。我也尝试过只使新显示的区域无效 - 只有一个完整的Invalidate似乎有效。

关于如何解决这个问题的任何指示?

演示代码:

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

public class Form1 : Form
{
    static void Main()
    {
        Application.Run(new Form1());
    }

    public Form1()
    {
        this.ClientSize = new System.Drawing.Size(472, 349);

        DoubleBuffered = true;
        //ResizeRedraw = true;
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        int dimensions = 70;

        using ( Pen pen = new Pen(Color.Gray) )
        {
            pen.DashStyle = DashStyle.Dash;

            for ( int x = 0; x < 20; ++x )
            {
                for ( int y = 0; y < 20; ++y )
                {
                    Rectangle rect = new Rectangle(x * dimensions, y * dimensions, dimensions, dimensions);

                    e.Graphics.DrawRectangle(pen, rect);
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我认为有两个问题:窗口边缘似乎有一个区域没有正确绘制矩形;并且你正在将矩形绘制在一起,因此划线将无法正常工作。

使用以下内容替换OnPaint循环:

   for (int y = 0; y < Height; y += dimensions)
   {
       e.Graphics.DrawLine(pen, 0, y, Width, y);
   }
   for (int x = 0; x < Width; x += dimensions)
   {
       e.Graphics.DrawLine(pen, x, 0, x, Height);
   }