2009-04-10 6 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(); 

Если вы используете событие рисования вам даже не нужен объект таймера.

+0

Спасибо, я уже понял, и вы правы, я должен поместить этот код в событие Paint. – Saber

0

Вы должны комбинировать этот код с тем же тиковым событием, которое меняет задний план. В противном случае у вас действительно будет состояние гонки, относительно которого «галочка» будет запущена в первую очередь. Объединение их решит эту проблему.

+0

Они уже в одном тике. Первая строка меняет фон. – Saber

0

Предложение по обновлению фона и переднего плана в то же время является прочным.

Если вы не можете контролировать это, возможно, вы можете добавить прозрачный элемент управления в свое окно поверх фона и нарисовать прозрачный элемент управления? Таким образом, вы всегда будете выше в Z-порядке. Это также уменьшит необходимость регулярного перекраивания.

+0

Ну, я попытался нарисовать круг на панели. Но это не сработало. У вас есть образец кода, чтобы нарисовать круг на прозрачном элементе управления? – Saber

Смежные вопросы