我玩了一些由我創建的自定義控件,我想爲它們繪製一些圖形。創建新對象時繪製圖形
我實現了我想要的一切,但我有一個問題,因爲有些東西對我來說似乎很陌生。 我試圖例如使一個新的控制是這樣的:
public class Square : Control
{
public Square(Point location)
{
this.Size = new Size(100, 100);
this.Location = location;
Draw();
}
public void Draw()
{
Graphics g = this.CreateGraphics();
g.DrawRectangle(Pens.Black, 5, 5, 20, 20);
}
}
這不畫任何東西,但是,如果我叫「繪製」的方法從喜歡它的工作表單上的按鈕按下另一個動作。 如果我重寫我的控件的OnPaint方法並在這裏調用「Draw」方法,它也可以工作。 (我知道我應該製作Paint/OnPaint中的所有繪圖,但我只是爲了嘗試其他的東西)
有什麼區別?爲什麼我不能在我想要的任何位置調用我的「繪製」方法?
大概由'Draw()'調用完成的繪圖被第一個'OnPaint'調用覆蓋。並且在一個按鈕點擊處理程序中調用它只會「工作」,直到部分或全部控件失效並調用「OnPaint」,這將再次覆蓋您在「Draw」中繪製的內容。這是僅在「OnPaint」中繪製規則的原因。請參閱http://stackoverflow.com/questions/30419493/drawing-glitches-when-using-creategraphics-rather-than-paint-event-handler-for-c。 – adv12
你可以簡單地關注[msdn](https://msdn.microsoft.com/en-us/library/b818z6z6(v = vs.110).aspx)(quote:*「當從Control類繼承時,你必須重寫'OnPaint'方法「*)。誰告訴你你的方法應該起作用?它不會。 – Sinatr
現在我明白了!真棒解釋:) –