Вы не переопределяете метод OnPaint()
.Вы просто подписываетесь на событие Paint
, поэтому не следует вызывать base.OnPaint()
.
Вы должны (могли) вызывать base.OnPaint()
только при переопределении метода OnPaint()
в форме:
protected override OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// ... other drawing commands
}
Метод OnPaint
в элементах управления Windows Forms фактически вызывает событие Paint
элемента управления, а также рисует поверхность элемента управления.Вызывая метод OnPaint
базовой формы в обработчике событий Paint
, вы фактически указываете форме снова и снова вызывать обработчик Paint
, и поэтому вы попадете в бесконечный цикл, и, следовательно, StackOverflowException
.
Когда вы переопределяете метод OnPaint
элемента управления, обычно вы должны вызывать базовый метод, чтобы элемент управления рисовал сам, а также вызывать обработчики событий, подписанные на событие Paint
.Если вы не вызовете базовый метод, некоторые аспекты управления не будут отображаться, и никакой обработчик событий не будет вызван.