Мои комментарии выше применяются.Вот пример того, как нарисовать на каждом элементе управления и форме отдельно :
У нас лучше всего есть общая процедура рисования, которую мы можем вызвать из Paint
событие каждого участвующего элемента, в нашем случае Panel
, PictureBox
и Form
.
Хитрость заключается в том, что все вложенные элементы рисуют окружность , смещенную на своисобственное местоположение.Для этого мы передаем эти вещи в процедуру рисования:
- a valid
Graphics
object.Мы получаем его из событий Paint
. - и ссылки на элемент управления;мы используем его для смещения рисунка на каждом элементе управления (кроме формы) с помощью
Graphics.TranslateTransform
..:
Результат:
Как вы можете видеть выглядит как будто мы нарисовали один круг по всем элементам, но на самом деле мы нарисовали три кругов, каждый на один элемент ..:
![enter image description here](https://i.stack.imgur.com/GWnhb.png)
private void canvasForm_Paint(object sender, PaintEventArgs e)
{
draw(sender as Control, e.Graphics);
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
draw(sender as Control, e.Graphics);
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
draw(sender as Control, e.Graphics);
}
private void draw(Control ctl, Graphics g)
{
Rectangle r = new Rectangle(200, 100, 75, 75);
if (ctl != canvasForm) g.TranslateTransform(-ctl.Left, -ctl.Top);
g.FillEllipse(Brushes.Green, r);
g.ResetTransform();
}
Обратите внимание, что один и тот же результат может быть создан с тремя вызовами, одним FillRectangle
, одним DrawImage
и одним FillEllipse
: -)