2012-12-16 95 views
0

在面板的Paint事件中,我有一個代碼,應該在2點之間畫一條藍線。c#面板線覆蓋

 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()不起作用。
我在做什麼錯了?

回答

1

您需要將所有點保存在某個結構中。 在Paint方法中,您將遍歷結構並繪製所有線條。

這是因爲當Paint激活時,它再次重繪所有的控件,它不能「記住」之前有什麼,它只是在做你在裏面寫的東西。

+0

好的,我已經完成了這個。現在一切正常。謝謝。 –