Поделиться через


Переопределение метода OnPaint

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

Чтобы переопределить наследуемое событие

  1. Переопределите защищенный метод OnEventName.

  2. Вызовите метод OnEventName базового класса из переопределенного метода OnEventName, чтобы зарегистрированные делегаты получали событие.

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

Если вы работали с примером в Практическое руководство: Разработка простых элементов управления Windows Forms, вы видели пример переопределения метода OnPaint. Следующий фрагмент кода взят из этого примера.

Public Class FirstControl  
   Inherits Control  
  
   Public Sub New()  
   End Sub  
  
   Protected Overrides Sub OnPaint(e As PaintEventArgs)  
      ' Call the OnPaint method of the base class.  
      MyBase.OnPaint(e)  
      ' Call methods of the System.Drawing.Graphics object.  
      e.Graphics.DrawString(Text, Font, New SolidBrush(ForeColor), RectangleF.op_Implicit(ClientRectangle))  
   End Sub  
End Class
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  
   Inherits EventArgs  
   ...  
   Public ReadOnly Property ClipRectangle() As System.Drawing.Rectangle  
      ...  
   End Property  
  
   Public ReadOnly Property Graphics() As System.Drawing.Graphics  
      ...  
   End Property
   ...  
End Class  
public class PaintEventArgs : EventArgs {  
...  
    public System.Drawing.Rectangle ClipRectangle {}  
    public System.Drawing.Graphics Graphics {}  
...  
}  

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

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

См. также