Те же процедуры, которые вы используете сейчас, вызывая их из события Paint()
элемента управления.
То же самое, если вы создаете пользовательский элемент управления. В этом случае используйте переопределенное событие OnPaint()
.
В событии Paint()
элемента управления вызовите один или несколько методов для рисования фигуры на поверхности элемента управления.
private void label1_Paint(object sender, PaintEventArgs e)
{
DrawCircle1(e.Graphics, label1.ClientRectangle);
}
private void label2_Paint(object sender, PaintEventArgs e)
{
DrawCircle2(e.Graphics, label2.ClientRectangle);
}
Используйте границы элемента управления ClientRectangle для получения размера фигуры.
Здесь ClientRectangle уменьшается на 1 при использовании Graphics.DrawEllipse()
и на 2 при использовании Graphics.DrawPath()
. Два метода рассчитывают размер пера относительно области рисования немного по-разному.
private void DrawCircle1(Graphics g, RectangleF DrawingArea)
{
DrawingArea.Inflate(-2, -2);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.CompositingQuality = CompositingQuality.HighQuality;
using (GraphicsPath path = new GraphicsPath())
{
path.StartFigure();
path.AddArc(DrawingArea, 0, 360);
path.CloseFigure();
using (Pen p = new Pen(Color.Blue, 2))
g.DrawPath(p, path);
}
}
private void DrawCircle2(Graphics g, RectangleF DrawingArea)
{
DrawingArea.Inflate(-1, -1);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.CompositingQuality = CompositingQuality.HighQuality;
using (Pen p = new Pen(Color.Red, 2))
g.DrawEllipse(p, DrawingArea);
}
Вы также можете сделать рисунок предметом, если хотите показывать его только в некоторых случаях.
Например, если щелкнуть Button1
, он изменит условие переменной, установив для него значение false, а затем заставит Label1
перерисовать себя, вызвав метод Invalidate()
. Если фигура уже нарисована, она будет удалена:
private bool DrawThisCircle = true;
private void button1_Click(object sender, EventArgs e)
{
DrawThisCircle = false;
label1.Invalidate();
}
private void label1_Paint(object sender, PaintEventArgs e)
{
if (DrawThisCircle)
DrawCircle1(e.Graphics, label1.ClientRectangle);
}