2012-02-16 3 views
1

У меня есть vb .net winform, которая отображается другими формами. У меня frmA.vb, frmB.vb, frmC.vb и frmD.vb.Многопользовательская форма

Все формы могут вызывать frmItem.vb. frmItem.vb позволяет пользователю выбирать элемент из базы данных, этот элемент отправляется путем вызова Set Property в родительском элементе.

т.е.

открываю ФРБИ, нажмите на кнопку (что-то вроде :)

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.

Возможно ли, что одна форма, может управлять несколькими родителями простым способом?

Если вам нужна дополнительная информация, то дайте мне знать. Спасибо

ответ

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

ничего себе, я имею фирн Используйте эти вещи. Я попробую. Благодаря! – Jaxedin

Смежные вопросы