投稿者 あにす  (社会人) 投稿日時 2009/2/5 20:34:13
>もし、クラス側に描画を担当させるような実装にするのであれば、クラス側の実装は
>イベントとしてではなく、デリゲートを登録させる実装の方が良いかも知れません。 

なんか話が難しくなってきたのですが(笑)こういうことでしょうか?
Imports System.Windows.Forms
Imports System.Drawing

Module Module1
    Public Sub main()
        Application.Run(New MainForm())
    End Sub
End Module

Class MainForm
    Inherits Form

    Dim pb As CustomPictureBox

    Public Sub New()
        pb = New CustomPictureBox()
        pb.Dock = DockStyle.Fill
        Me.Controls.Add(pb)

        pb.RectList.Add(New PaintEventHandler(AddressOf DrawBackGround))
        pb.RectList.Add(New PaintEventHandler(AddressOf drawBlackRect))
        pb.RectList.Insert(1, New PaintEventHandler(AddressOf drawRedRect))
    End Sub

    Sub DrawBackGround(ByVal sender As ObjectByVal e As PaintEventArgs)
        e.Graphics.FillRectangle(Brushes.White, e.ClipRectangle)
    End Sub

    Sub drawBlackRect(ByVal sender As ObjectByVal e As PaintEventArgs)
        e.Graphics.FillRectangle(Brushes.Black, New RectangleF(10, 10, 100, 100))
    End Sub

    Sub drawRedRect(ByVal sender As ObjectByVal e As PaintEventArgs)
        e.Graphics.FillRectangle(Brushes.Red, New RectangleF(20, 20, 100, 100))
    End Sub

End Class

Class CustomPictureBox
    Inherits PictureBox

    Public RectList As New List(Of PaintEventHandler)

    Sub CustomPictureBox_Paint(ByVal sender As ObjectByVal e As PaintEventArgs) Handles Me.Paint
        For Each method As PaintEventHandler In rectList
            method(sender, e)
        Next
    End Sub
End Class

[delegate].Combine()使うとなんか不便そうなのでList(Of PaintEventHandler)で持たせました。