C# 面板行覆盖



在面板的 Paint 事件中,我有一个代码,应该在 2 点之间画一条蓝线。

        private void panel1_Paint(object sender, PaintEventArgs e)
    {
        panel1.AllowDrop = true;
        listBox1.AllowDrop = true;
        if (!s.IsEmpty && !f.IsEmpty)
        {
            e.Graphics.DrawLine(new Pen(Color.Blue, 5f), f, s);
            s = Point.Empty;
            f = Point.Empty;
        }
    }

我使设定点方法中的面板无效:

     void setPoint(Point p)
    {
        if (f.IsEmpty)
            f = p;
        else
        {
            s = p;
            panel1.Invalidate();
        }

    }

这是通过单击按钮触发的。它会画一条线,但问题是,当一条线已经存在时。它将覆盖它。我认为问题出在Invalidate.但是我不知道如何解决它,因为Refresh()Update()不起作用。
我做错了什么?

您需要将所有点保存在某种结构中。在 Paint 方法中,您将遍历结构并绘制所有线条。

这是因为当 Paint 被激活时,它会再次重绘所有控件,并且它无法"记住"以前的内容,它只执行您在内部编写的内容。

相关内容

  • 没有找到相关文章

最新更新