2016-12-27 65 views
0

所以我創建了一個自定義控件,我想繪製該控件 現在的問題是,我不能使用OnPaint事件,因爲我想 在不同的時間繪製不同的條件。C#繪製自定義控件

這裏是自定義的控制功能來繪製一個矩形

public void DrawARectangle(int x,int y,int height,int width) 
 
{ 
 
    Graphics g = this.CreateGraphics(); 
 
    g.DrawRectangle(Pens.Black, x, y, height, width); 
 
    g.FillRectangle(Brushes.Black, x, y, height, width); 
 
}

我基本上把它從我的形式,但它即使使用更新後不畫任何東西()方法。

回答

1

Graphics g = this.CreateGraphics();這幾乎總是錯了。使用Paint/OnPaint事件及其e.Graphics參數!在一些地方保存的座標,並準備總是畫寄託都..

,因爲我想在不同條件下不同的時間畫出我不能使用OnPaint事件。是的。但你必須

這是圖形在winforms中的工作方式。這隻聽起來浪費,但..:該系統還需要調用此事件時,必須要恢復的窗口,所以沒有辦法解決它,如果你希望你的繪圖到堅持 ..

只有非 - 持續圖形操作(如顯示動態橡皮筋矩形或跟在鼠標後面的一行)與您從control.CreateGraphics()獲得的Graphics對象正常。和測量沒有繪圖...

每當您的數據發生變化時,通過在您的控件上調用Invalidate觸發重新繪製。

2

您必須使用Control.OnPaint來進行自定義繪圖。否則,在下次重新繪製控件後,所有圖形都將被刪除。 這個想法是你可以將你的矩形存儲在一個列表中。然後在您的Control.OnPaint中,根據該列表執行繪圖。

+0

以及我試圖製作一個像控件一樣的地圖,它會不斷更新,但我猜如果我不能將它作爲一個自定義控件,然後在它自己的形式。 – Diab

+0

@Diab,即使你直接在表單中。您還需要在Form.OnPaint事件中執行操作。校長還是一樣的。 –

+0

我確實在表單上多次繪製過它,它可以工作,也許你想念我,我想在OnPaint事件發生後繪製,我不明白爲什麼它必須再次發生或由它自己重繪。 – Diab