Раздел «Технологии программирования».Paint:

Рисование в С#

При создании графического интерфейса с помощью C# часто возникает необходимость нарисовать несложные плоские геометрические фигуры. Для этого не нужен вызывающий проблемы с совместимостью и кроссплатформенностью DirectX. Выдавать готовые картинки нет возможности, так как информация о том, что там должно быть изображено, получается в результате работы программы и неизвестна заранее. Для этих целей есть класс Graphics

Graphics gr = Graphics.FromImage( pictureBox1.Image );

Прежде чем рисовать, надо очистить поле:

gr.Clear( Color.Black );

затем можно что-нибудь нарисовать, например, круг:

 gr.FillEllipse( new SolidBrush( Color.FromArgb( r, g, b)), (int)(pictureBox1.Width/2-size/2), (int)(pictureBox1.Height/2-size/2), (int)(size), (int)(size ));

r, g и b - составляющие цвета Для того, чтобы картинка появилась на экране,

pictureBox1.Invalidate();

Переопределение события Paint

Основные шаги для переопределения любого события, определенного в .NET Framework, идентичны и обобщены в следующем списке.

Чтобы переопределить наследуемое событие, выполните следующие действия.

  1. Переопределите защищенный метод OnИмяСобытия.
  2. Вызовите метод OnИмяСобытия базового класса из переопределенного метода OnИмяСобытия, чтобы зарегистрированные делегаты получили событие.

Событие Paint описано здесь подробно, так как каждый элемент управления Windows Forms должен переопределять событие Paint, наследуемое им от класса Control. В базовом классе Control не содержатся сведения о способе отображения производного элемента управления и какой-либо логике рисования в методе OnPaint. Метод OnPaint Control лишь отправляет событие Paint зарегистрированным получателям событий.

public class FirstControl : Control{
   public FirstControl() {}
   protected override void OnPaint(PaintEventArgs e) {
      // Call the OnPaint method of the base class.
      base.OnPaint(e);
      // Call methods of the System.Drawing.Graphics object.
      e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle);
   } 
} 

Класс PaintEventArgs содержит данные для события Paint. Он имеет два свойства, как показано в следующем коде.

public class PaintEventArgs : EventArgs {
...
    public System.Drawing.Rectangle ClipRectangle {...}
    public System.Drawing.Graphics Graphics {...}
...
}

ClipRectangle — прямоугольник для рисования, а свойство Graphics ссылается на объект System.Drawing.Graphics. Классы в пространстве имен System.Drawing — управляемые классы, предоставляющие доступ к функциональности GDI+, новой библиотеки графики Windows. Объект Graphics содержит методы для рисования точек, строк, линий, дуг, эллипсов и многих других форм.

Элемент управления вызывает свой метод OnPaint в случае необходимости изменения его визуального отображения. Этот метод в свою очередь инициирует событие Paint.

Переопределение события OnPaint

Переопределение метода OnPaint позволяет изменять внешний вид не для всех элементов управления. Элементы управления, оформленные средствами Windows (например, Textbox), никогда не вызывают собственный метод OnPaint и потому не используют нестандартный код. Сведения о доступности метода OnPaint для изменения см. в документации соответствующего элемента управления. Если в списке методов элемента управления нет метода OnPaint, то изменение интерфейса путем переопределения этого метода невозможно.
public class FirstControl : Control{
   public FirstControl() {...}
   protected override void OnPaint(PaintEventArgs e) {
      base.OnPaint(e);
      e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle, style);
   } 
}
-- Main.DmitryPodlesnykh - 30 Jun 2005