現在取り組んでいる他のプロジェクトで必要とされているため、アセンブリにあるクラスがあります。1つのクラスはそれをクラスファクトリと呼び、クリックイベントハンドラーをアタッチする必要があるコントロールのグループを作成します。特定の機能に基づいてポリモーフィックな動作を決定するアルゴリズムがありますが、それは比較的無関係です。イベントハンドラがアセンブリの一部ではない特定のフォームを開かなければならないため、そのフォームにはこの「ファクトリ」クラスが必要です。循環参照を作成せずに、フォームが定義するハンドラーイベントを本質的に「委任」できる方法はありますか?
簡単な回避策として、2つの別々のクラスを維持する必要がありました。1つはフォームを含むプロジェクトに、もう1つはアセンブリにあります。これは明らかに間違った方法です。
私が何をしようとしているのかはわかっているが、それをどうやってやるのかわからないので、タイトルについては100%確信が持てない。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Width = 1500
Dim panel As New Panel
panel.Location = New Point(0, 0)
panel.Size = New Size(1000, 200)
panel.BackColor = Color.Yellow
Me.Controls.Add(panel)
Dim factory As New DrawFactory
factory.DrawPanel(panel, 5)
End Sub
上記は、クラスライブラリにある次のコードとは別のプロジェクトにあります。
Public Class DrawFactory
Private xOffset As Integer = 0
Private Const widthConst As Integer = 50
Public Sub DrawPanel(ByRef panel As Panel, ByVal drawPanels As Integer)
Application.DoEvents()
For i As Integer = 0 To drawPanels
Dim childPanel As New Panel
childPanel.Location = New Point(xOffset, 0)
childPanel.Size = New Size(widthConst, panel.Height)
If i < 1 Then
childPanel.BackColor = Color.Blue
Else
childPanel.BackColor = Color.Pink
End If
xOffset = xOffset + widthConst
''want to add a handler here to open say form5 which is unknown and undefined in the scope of this class
panel.Controls.Add(childPanel)
Next
End Sub
End class
これは私の実際のコードではありませんが、私が直面している問題の要点を表しています。C#またはVB.NETでの回答は問題ありません。