Как нарисовать круг на меняющемся фоне - PullRequest
0 голосов
/ 10 апреля 2009

В форме есть таймер, а в событии 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);

Проблема в том, что на каждом тике меняются фоновые изменения, а в форме я не вижу кружка.

Ответы [ 3 ]

2 голосов
/ 17 апреля 2009

Что вам нужно сделать, это поместить свой код в событие Paint формы. Это заставит ваш код перерисовываться всякий раз, когда форма должна перерисовываться. Например, наведите курсор мыши на форму или переместите форму. Также, где вы объявляете свой графический объект? Потому что в вашей форме он будет нарисован только в том случае, если вы выполните:

Graphics g = this.CreateGraphics();

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

0 голосов
/ 10 апреля 2009

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

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

0 голосов
/ 10 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...