Следует обратить внимание, что был освобожден не только графический объект поверхности, но и объект кисти, который создавался для рисования эллипса.

3. Результат выполнения этой программы показан на рис. 6.27.

Рис. 6.27. Результат повреждения рисунка на форме окном сообщения.

4. Каждый раз, когда с элементом управления происходит событие, которое может повредить рисунок на его поверхности, например перекрытие другим объектом или изменение размеров, происходит его перерисовка, то есть срабатывает событие OnPaint. Нужно написать обработчик этого события, как это показано в листинге 6.37. Листинг 6.37

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As

System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim g As Graphics = e.Graphics

Dim br As New Drawing.SolidBrush(Drawing.Color.Red)

g.FillEllipse(Br, 20, 40, 200, 200)

br.Dispose()

End Sub

В этом случае кисть освобождается, а сам графический объект в освобождении не нуждается. После того как окно сообщений будет убрано, на красном круге не останется следов, потому что он рисуется заново.

5. Так можно рисовать на поверхности панели или нет? Можно, но только внутри вызова события Paint. Нужно положить на форму панель и написать обработчик для ее события Paint, код которого приведен в листинге 6.38.

Листинг 6.38

Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

Dim gPan As Graphics = e.Graphics

Dim br As New Drawing.SolidBrush(Drawing.Color.White)

Panel1.BackColor = Drawing.Color.Black

gPan.FillEllipse(br, 75, 10, 40, 40)

br.Dispose()

End Sub

6. Результат работы программы показан на рис. 6.28.

Рис. 6.28. Рисование на панели в событии Paint.

Перейти на страницу:

Похожие книги