Я бы сделал Интерфейс под названием Figure
, который будут реализованы всеми вашими фигурами. Для этого интерфейса потребуется метод Draw()
, который получает графику для рисования:
public interface Figure
{
void Draw(Graphics G);
}
Вот пример реализации интерфейса класса Line Рисунок:
public class Line : Figure
{
public void Draw(Graphics G)
{
// ... draw with "G" in here ...
}
}
Повторите для каждого типа фигуры, очевидно, соответственно настраивая метод рисования.
Теперь в событии MouseDown вашего PictureBox, где вы создаете «figure», сохраните ссылку на «figure» в свойстве Tag()
PB. Вы можете привести свой параметр "a" к типу Control, чтобы добиться этого:
p.MouseDown += (a, b) =>
{
// ... existing code that creates "figure" ...
Control ctl = (Control)a;
ctl.Tag = figure;
};
Затем в событии Paint () вашего PictureBox вы можете привести свойство Tag()
к типу Figure
и вызвать Draw()
. Опять же, вы сначала приведете параметр «a» к типу Control или PictureBox. Передайте предоставленную вам графику через параметр "b" :
p.Paint += (a, b) =>
{
Control ctl = (Control)a;
Figure figure = (Figure)ctl.Tag;
figure.Draw(b.Graphics);
};