2009-04-10 43 views
0

有在窗體上,並在其Tick事件我有一個計時器:如何,畫一個圓圈上的變化的背景

 this.BackColor = ColorTranslator.FromHtml("#" + ColorCodesBack[_index]); 

     CurrentColor = ColorTranslator.FromHtml("#" + ColorCodesFore[_index]); 
     SolidBrush sb = new SolidBrush(CurrentColor); 

     g.FillEllipse(sb, this.Width/2 -200, this.Height/2 - 200, 200, 200); 
     g.DrawImage(b, 150, 150); 

的問題是在每一個刻度只是背景的變化,我不在表單上看到一個圓圈。

回答

2

你應該做的是把你的代碼放在窗體Paint事件中。這將導致您的代碼重新繪製表單必須重新繪製。就像在窗體上移動鼠標或移動窗體一樣。你還在哪裏宣佈你的圖形對象?因爲它會在窗體上得出的唯一方法是,如果你這樣做:

Graphics g = this.CreateGraphics(); 

如果你使用,你甚至不會需要一個計時器對象Paint事件。

+0

謝謝,我已經想好了,你說得對,我應該把這段代碼放到Paint事件中。 – Saber 2009-09-07 06:36:44

0

您應該將此代碼與正在更改背景的相同刻度事件結合使用。否則,你會有一個競爭條件,首先會觸發哪個「嘀嗒」。將它們結合起來可以解決這個問題。

+0

它們已經在同一個Tick中。第一行是改變背景。 – Saber 2009-04-10 17:11:31

0

建議同時更新背景和前景是可靠的。

如果你無法控制這個,也許你可以在背景上添加一個透明的控件到你的窗口,然後繪製到透明控件上?這樣你總是會在Z-Order上面。這也會減少您定期重繪的需求。

+0

那麼,我試圖在面板上畫圓。但它沒有工作..你有一個代碼示例在透明控件上繪製一個圓圈? – Saber 2009-04-10 17:13:34