由於我目前正在處理的其他項目需要,因此我有一個程序集中的類。 一個類可以稱之爲Class Factory,創建一組需要附加點擊事件處理程序的控件,我有基於某些特徵來確定多態行爲的算法,但這是相對無關緊要的。 由於事件處理程序必須打開一個不屬於我的程序集的特定表單,並且該表單需要此「工廠」類。如果不創建循環引用,有什麼辦法可以基本上「委託」表單的處理程序事件來定義?將事件委託給表單而不創建循環引用
作爲一個簡單的解決方法,我不得不維護兩個獨立的類,一個在窗體項目中,另一個在程序集中。這顯然是錯誤的路要走。
不是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
這不是我的實際代碼,但它描繪的是我的問題JIST米麪臨,我不介意在C#或VB.NET中的答案。
請處理一個簡單的虛構示例來說明您的問題。 –
@SteveDog我已經按要求添加了一個示例 – Tyson
您是否嘗試將表單上存在的事件處理程序添加到childPanels上的事件?如果是這樣,哪個事件? –