c#面板行覆盖

时间:2012-12-16 12:50:18

标签: c# winforms graphics drawing panel

在面板的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;

        }

    }

Im在SetPoint方法中使面板无效:

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


    }

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

1 个答案:

答案 0 :(得分:1)

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

那是因为当Paint被激活时,它会再次重新绘制所有控件,并且它不能“记住”之前的内容,它只会执行你在里面写的内容。