Фигуры фиксированного размера можно нарисовать так:
public partial class Form1 : Form
{
private int BrushType = 1;
public Form1()
{
InitializeComponent();
// создаем PictureBox
var pic = new PictureBox { Dock = DockStyle.Fill, BackColor = Color.White };
pic.MouseClick += PictureBox_MouseClick;
this.Controls.Add(pic);
// создаем панель для кнопок
var panel = new FlowLayoutPanel { Dock = DockStyle.Top, AutoSize = true };
this.Controls.Add(panel);
// кнопки
var btn = new RadioButton
{
Text = "Круг",
Tag = 1,
Appearance = Appearance.Button,
Checked = true,
AutoSize = true
};
btn.Click += Button_Click;
panel.Controls.Add(btn);
btn = new RadioButton
{
Text = "Не круг",
Tag = 2,
Appearance = Appearance.Button,
AutoSize = true
};
btn.Click += Button_Click;
panel.Controls.Add(btn);
btn = new RadioButton
{
Text = "Квадратный круг",
Tag = 3,
Appearance = Appearance.Button,
AutoSize = true
};
btn.Click += Button_Click;
panel.Controls.Add(btn);
}
private void Button_Click(object sender, EventArgs e)
{
var btn = (RadioButton)sender;
this.BrushType = (int)btn.Tag;
}
private void PictureBox_MouseClick(object sender, MouseEventArgs e)
{
// получаем ссылку на PictureBox
var pic = (PictureBox)sender;
// получаем Graphics из PictureBox
var g = pic.CreateGraphics();
if (this.BrushType == 2)
{
// рисуем не круглый квадрат
g.DrawRectangle(Pens.Black, e.X, e.Y, 50, 50);
}
else if (this.BrushType == 3)
{
// рисуем квадратный круг
Point[] points = new Point[6];
int half = 50 / 2;
int quart = 50 / 4;
points[0] = new Point(e.X + quart, e.Y);
points[1] = new Point(e.X + 50 - quart, e.Y);
points[2] = new Point(e.X + 50, e.Y + half);
points[3] = new Point(e.X + 50 - quart, e.Y + 50);
points[4] = new Point(e.X + quart, e.Y + 50);
points[5] = new Point(e.X, e.Y + half);
g.DrawPolygon(Pens.Black, points);
}
else
{
// рисуем эллипс
g.DrawEllipse(Pens.Black, e.X, e.Y, 50, 50);
}
}
}
В качестве кнопок используются
RadioButton, т.к. это удобней.
Чтобы не стиралось, можно сделать
Bitmap:
var pic = (PictureBox)sender;
if (pic.Image == null) { pic.Image = new Bitmap(pic.Width, pic.Height); }
var bmp = new Bitmap(pic.Image);
var g = Graphics.FromImage(bmp);
И после завершения рисования, передать картинку в
PictureBox:
pic.Image = bmp;
Результат: