2012-02-16 76 views
1

我有一個由其他窗體顯示的vb.netnet winform。我有frmA.vb,frmB.vb,frmC.vb和frmD.vb.多父窗體

這一切形式的可調用frmItem.vb。 frmItem.vb允許用戶從數據庫中選擇一個項目,這個項目是通過調用父項的一個設置屬性發送的。

我打開frmA,點擊按鈕(類似:)

fi = new frmItem(frmA) 'frmItem has 4 New() methods, frmA.. b... c and d 
    'i need to pass the correct parent. 
    fi.showModal() 

所以,當我加入一個項目,它要求

fA.addItem(item_id) 

它的工作原理確定,我懷疑是關於優化,因爲我重複了frmItem;一個副本管理frmA和frmB,另一個管理frmC和frmD。

在frmItem1當我到發送的項目,我使用:

private fB as frmB 
private fA as frmA 



if parentFrmA is nothing then 
    'Is frmB 
    fB.addItem(item_id) 
else 
    'Is frmA 
    fA.addItem(item_id) 
end if 

而且,在frmItem2:

private fC as frmC 
private fD as frmD 



if parentFrmC is nothing then 
    'Is frmD 
    fD.addItem(item_id) 
else 
    'Is frmC 
    fC.addItem(item_id) 
end if 

如果我修改frmItem1,我修改frmItem2,反之亦然,因爲它們應該看起來像一個一樣。

全部四種形式,具有相同的設置屬性,但像他們型動物的形式,我不能使用frmItem獨特的Form類。

是這樣一種形式,可以通過簡單的方法管理多家長posibility?

如果您需要更多的信息,讓我知道。由於

回答

0

我不能完全按照你的例子,因爲,好了,我認爲這只是很難跟隨。

但總的來說,這聽起來像這些孩子的形式應該只提高一個事件,父窗體偵聽。這樣,您可以將您的問題分開一點,而不是硬編碼這些依賴關係。

您可以嘗試製作自己的EventArgs類遵循最佳實踐:

Public Class ChildFormEventArgs 
    Inherits EventArgs 

    Private _ItemID As Integer 

    Public Sub New(ByVal itemID As Integer) 
    _ItemID = itemID 
    End Sub 

    ReadOnly Property ItemID() As Integer 
    Get 
     Return _ItemID 
    End Get 
    End Property 
End Class 

你的孩子的形式將有一個公共事件,當過這個「補充」的事情發生,你會提高它:

Public Class Form2 
    Public Event ItemAdded(ByVal sender As Object, ByVal e As ChildFormEventArgs) 

    Private _ItemID as Integer 

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 
    RaiseEvent ItemAdded(Me, New ChildFormEventArgs(_ItemID)) 
    End Sub 
End Sub 

然後你的父窗體是一個聽,可以採取相應的行動:

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 
    Using testForm As New Form2() 
    AddHandler testForm.ItemAdded, AddressOf ChildForm_ItemAdded 
    testForm.ShowDialog(Me) 
    RemoveHandler testForm.ItemAdded, AddressOf ChildForm_ItemAdded 
    End Using 
End Sub 

Private Sub ChildForm_ItemAdded(ByVal sender As Object, ByVal e As ChildFormEventArgs) 
    '// do something here. 
    '// sender is the child form that called it 
    '// e is the event arguments that contains the ItemID value 
End Sub 
+0

哇,我尼夫r使用這些東西。我會試試看。謝謝! – Jaxedin 2012-02-16 17:49:45