В качестве наглядного примера есть код
- Код: Выделить всё
Imports System
Imports System.Windows.Forms
Imports System.Drawing
Class ModernLabel
Inherits Label
Protected Overrides Sub OnPaint(ByVal Pea As PaintEventArgs)
'MyBase.OnPaint(Pea)
Dim g As Graphics = Pea.Graphics
g.DrawString(Me.Text, Font, Brushes.Black, 2, 2)
g.DrawString(Me.Text, Font, Brushes.White, 0, 0)
End Sub
End Class
Class Form1
Inherits Form
Shared Sub Main()
Application.Run(New Form1)
End Sub
Sub New()
Dim Label1 As New ModernLabel
Label1.Parent = Me
Label1.Text = "Label1 Text"
Label1.Location = New Point(10, 10)
'AddHandler Label1.Paint, AddressOf Label1_Paint
End Sub
'Private Sub Label1_Paint(ByVal Obj As Object, ByVal Pea As PaintEventArgs)
'End Sub
End Class
К примеру для того что б организовать тень компонента Надпись (Label) можно создать наследующий его класс, в котором перегрузить событие (свойство) OnPaint.
Считаю такой подход наиболее рациональным, если есть потребность в множестве таких контролов, и тени везде должны быть одинаковы.
А что если хотим проделать указанное действие применительно к одному элементу или тень должна быть разная? Возможно ли как-то в этом случаи устроить через AddHandler Label1.Paint, AddressOf Label1_Paint?
И правильно ли полагать что AddHandler Object1.Event, AddressOf Object_Event декларирует, что мы хотим во время этого события делать, а Protected Overrides Sub OnPaint(ByVal Pea As PaintEventArgs) в наследующем классе, говорим как?
К примеру, в случаи кнопки событии Click для того что б кнопка пищал при нажатии не обязательно перегружать это событие, достаточно в процедуре события указать соответственный вызов.
P.S.
Много страничная тема Свой элемент управления была достаточно давно, и там практика, мне хотелось бы для начала разобраться в теории.