2012-02-16 15 views
1

私は他のフォームで表示されているvb .net winformを持っています。私はfrmA.vb、frmB.vb、frmC.vb、およびfrmD.vbを持っています。複数の親フォーム

このフォームはすべてfrmItem.vbを呼び出すことができます。 frmItem.vbを使用すると、ユーザーはデータベースからアイテムを選択できます。このアイテムは、親のSetプロパティを呼び出して送信されます。私はアイテムを追加するときにそれはOK作品

fA.addItem(item_id) 

:)

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

よう

つまり、私はボタンをクリックし、frmAを開く

(何かがそう、それは、呼び出し、私の私はfrmItemを複製しているので、疑問は最適化に関するものです。 1つのコピーはfrmAとfrmBを管理し、もう1つは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とviceversaを変更するには、それらが見た目と同じように動作する必要があるためです。

すべての4つのフォームは、同じセットプロパティを持ちますが、異なるフォームのように、私はfrmItemで一意のフォームクラスを使用できません。

1つのフォームで複数の親を簡単に管理できるという可能性はありますか?

さらに詳しい情報が必要な場合は、お知らせください。ありがとう

答えて

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 

そしてあなたの親形態は1つのリスニングですし、それに応じて行動することができます。

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

うわー、私はネーヴましたこれらの種類のものを使用します。私はそれを試してみます。ありがとう! – Jaxedin