2011-05-20 13 views
2

我正在研究一個簡單的Windows窗體繪製應用程序。我在清除面板時遇到問題。我使用的代碼是如何在簡單的繪製應用程序中清除面板

private void panel1_Paint(object sender, PaintEventArgs e) 
{ 
    Graphics g = Graphics.FromImage(tempDraw); 
    Pen myPen = new Pen(foreColor, lineWidth); 
    g.DrawLine(myPen, x1, y1, x2, y2); 
    myPen.Width = 100; 
    myPen.Dispose(); 
    e.Graphics.DrawImageUnscaled(tempDraw, 0, 0); 
    g.Dispose(); 
} 

如何清除面板?

+0

重新油漆清除不起作用。請看下面我編輯的答案。您需要調整您的方法,以瞭解事物的繪製方式和時間以及原因。請閱讀Control.Paint事件。你會看到它會被系統自動調用。所以如果你總是在處理程序中繪畫,那麼總是會出現一些東西。您需要爲Paint事件處理程序提供根本不繪製任何東西的選項。 – 2011-05-20 13:27:28

回答

2

在面板實例的油漆處理程序正在繪製?如果沒有,那麼在面板上調用Invalidate就可以了。

但是你可能會堅持繪畫項目,所以爲了清除它們,你需要刪除已繪製的內容,然後調用Invalidate。您也可以使用FillRect填充特定顏色的面板,但這將是一個骯髒的解決方法,不適合您的最終設計。

您還應該查看CodeProject.com的示例like this one,以瞭解在創建此類繪圖應用程序時需要處理哪些內容。

編輯:

每所編輯的答案,你不能清除與現有的邏輯板。您正在繪製內部的Paint處理程序,該處理程序隨時需要重新繪製。這意味着你應該改變你的方法。你需要在Paint處理程序內部有一些條件來決定它是否會繪製任何東西。這就是繪圖對象持久性的地方。如果你想創建一個繪圖程序,那麼你必須在面板對象上處理鼠標的向下,向上和移動事件,並將數據存儲在點數組中。 (作爲一種繪圖類型的例子。)然後在你的Paint處理程序中,如果Points []不爲空,則繪製點。否則,你什麼都不畫......最後放在一個空容器裏。然後,如果您需要清除圖形,則刪除Points數組的內容並在Panel上調用Invalidate。這將清除持續的數據並重新繪製爲無。

0

你必須再次使用任何你使用的基本顏色來繪製面板,例如。白色\灰色與Graphics.FillRectangle方法:

// Create solid brush. 
SolidBrush whiteBrush = new SolidBrush(Color.White); 
// Create location and size of rectangle. 
// Fill rectangle to screen. 
e.Graphics.FillRectangle(whiteBrush, panel.Location.X, panel.Location.Y, panel.Width, panel.Height); 
this.Invalidate(); 
+0

正如你所提到的,我用矩形填充它。它會清除屏幕,但如果我再次畫它會重新出現 – Kanishka 2011-05-20 12:45:38

+0

什麼會重新出現? – w69rdy 2011-05-20 12:47:22

+0

圖像的已刪除部分。我畫了一條線並清除它。當我試圖畫另一條線時,上一行再次出現 – Kanishka 2011-05-20 12:48:59

2

您可以使用

Panel1.Invalidate(); 

但是有一個問題,這一點,以後你調用這個函數它清除面板的所有圖形,但它也回顧了功能,即

private void panel1_Paint(object sender, PaintEventArgs e) 
{ 
    //This function is recalled after Panel1.Invalidate(); 
} 

所以解決辦法是讓你的油漆代碼在其他功能中

private void MyDrawing() 
{ 
    Graphics g = Graphics.FromImage(tempDraw); 
    // if above line doesn't work you can use the following commented line 
    //Graphics g = Graphics.Panel1.CreateGraphics(); 

    Pen myPen = new Pen(foreColor, lineWidth); 
    g.DrawLine(myPen, x1, y1, x2, y2); 
    myPen.Width = 100; 
    myPen.Dispose(); 
    Panel1.Graphics.DrawImageUnscaled(tempDraw, 0, 0); 
    g.Dispose(); 
} 
相關問題