c#面板线覆盖

c#面板线覆盖,c#,winforms,graphics,drawing,panel,C#,Winforms,Graphics,Drawing,Panel,在面板的绘制事件中,我有一个代码,它应该在两个点之间画一条蓝线 private void panel1_Paint(object sender, PaintEventArgs e) { panel1.AllowDrop = true; listBox1.AllowDrop = true; if (!s.IsEmpty && !f.IsEmpty) { e.Graphi

在面板的绘制事件中,我有一个代码,它应该在两个点之间画一条蓝线

        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;

        }

    }
Im在设定点方法中使面板无效:

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


    }
这是通过点击按钮触发的。 它将画一条线,但问题是当一条线已经存在时。它将覆盖它。我以为问题出在
失效
。但我不知道如何修复它,因为
Refresh()
Update()
不起作用。

我做错了什么?

您需要将所有的点保存在某个结构中。 在“绘制方法”中,您将在结构中循环并绘制所有线


这是因为当Paint被激活时,它会再次重新绘制所有控件,并且它无法“记住”以前的内容,它只是在做你在里面写的东西

好的,我已经做过了。现在一切正常。谢谢