2013-10-04 47 views
-1

我想在C#中的Windows窗體應用程序上繪製一系列矩形。我正在使用System.Drawing.Graphics繪製矩形。他們工作得很好,但是一旦我切換到另一個應用程序在我的電腦上或最小化窗體,他們就會消失。有誰知道這是爲什麼?Windows窗體上的形狀消失

System.Drawing.Graphics graphics = this.CreateGraphics(); 
System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(
    25 + (32 * PASS_THROUGH), 190, 32, 32); 
graphics.DrawRectangle(System.Drawing.Pens.Green, rectangle); 
+5

您沒有繪製它們來響應WM_PAINT事件。您需要將事件處理程序附加到「Control.Paint」事件或重寫「OnPaint」。如果您需要進一步幫助,請發佈代碼。 –

+1

添加了代碼,我很抱歉 – Evan

+0

@TrevorElliott Post作爲答案,以便我可以upvote你。 – Tarik

回答

3

你不打算以正確的方式繪畫。下面是它如何工作的一些基本信息:

http://msdn.microsoft.com/en-us/library/kxys6ytf.aspx

你應該有代碼看起來像這樣:

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 

    Rectangle = new Rectangle(25 + (32 * PASS_THROUGH), 190, 32, 32); 
    e.Graphics.DrawRectangle(Pens.Green, Rectangle); 
} 

Windows就會調用此方法時,它需要重新繪製你的窗口。

如果您希望能夠動態更改繪畫內容,則需要爲此方法添加邏輯。如if語句寫道:if (drawRectangle) ...

當你想顯示你的控制改變可變像我的drawRectangle上面的例子後重繪自己,你只需要調用對有問題的控制Control.Invalidate方法。

您可以管理很多不同的變量和對象來控制繪製的內容,例如形狀列表。在您的繪畫方法中,您將循環遍歷這些形狀並逐一繪製它們。我不知道這是你想要做什麼,或者如果你只是想自定義表單的外觀,而不需要動態改變。