2009-04-10 9 views
0

Es gibt einen Timer auf dem Formular ist und in seiner Tick-Ereignis Ich habe:How-to einen Kreis auf einem sich verändernden Hintergrund zeichnen

 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); 

Das Problem ist nur Hintergrund Änderungen auf jedem Tick und ich weiß nicht Sehen Sie sich einen Kreis auf dem Formular an.

Antwort

2

Was Sie tun sollten, ist Ihren Code in die Formulare Paint-Ereignis zu setzen. Dadurch wird der Code immer neu gezeichnet, wenn das Formular neu gezeichnet werden muss. So wie Sie Ihre Maus über das Formular bewegen oder das Formular verschieben. Wo deklarieren Sie auch Ihr Grafikobjekt? Weil der einzige Weg, wird es auf dem Formular gezogen werden, wenn Sie tun:

Graphics g = this.CreateGraphics(); 

Wenn Sie das Paint-Ereignis verwenden, werden Sie nicht einmal ein Timer-Objekt benötigen.

+0

Danke, ich dachte schon, und du hast Recht, ich sollte diesen Code in Paint-Ereignis setzen. – Saber

0

Sie sollten diesen Code mit dem gleichen Tick-Ereignis kombinieren, das den Hintergrund ändert. Ansonsten haben Sie tatsächlich eine Race-Bedingung, welcher "Tick" zuerst ausgelöst wird. Durch die Kombination wird dieses Problem gelöst.

+0

Sie sind bereits in der gleichen Tick. Die erste Zeile ändert den Hintergrund. – Saber

0

Der Vorschlag, den Hintergrund und den Vordergrund gleichzeitig zu aktualisieren, ist solide.

Wenn Sie das nicht kontrollieren können, könnten Sie vielleicht ein transparentes Steuerelement zu Ihrem Fenster über dem Hintergrund hinzufügen und auf das transparente Steuerelement zeichnen? Auf diese Weise wärst du immer oben in der Z-Reihenfolge. Dies würde auch die Notwendigkeit verringern, regelmäßig neu zu zeichnen.

+0

Nun, ich habe versucht, den Kreis auf einem Panel zu zeichnen. Aber es hat nicht funktioniert. Sie haben ein Codebeispiel, um einen Kreis auf einem transparenten Steuerelement zu zeichnen? – Saber

Verwandte Themen