2016-07-12 6 views
0
VB.net

Ich habe ein Dialogform, die eine Strichcode-Scanner-Handler Form ist, die Ereignisse auf dem Formular hat es aus, wie dies geschehen hieß:Erneutes Öffnen eines Disposed-Formulars, das mit Ereignissen deklariert wurde.

Public Class FRMCheckout 

    Dim WithEvents Batch_Scanner_Dialog As New CheckoutBatchScanner 

    Private Sub Recieve_Scaned_Object(Scan_Object As tructures.ScanDetails) Handles Batch_Scanner_Dialog.Scanned_Item 
     '.....Do Stuff' 
    End Sub 

    Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click 
     Batch_Scanner_Dialog.Show() 
    End Sub 

End Class 

Die Batch_Scanner_Dialog ist nur mit dem regulären alt Close geschlossen .Me, die sich offensichtlich selbst disponiert.

Das Problem ist, wenn Sie den Dialog erneut öffnen möchten, wird ein Zugriff auf eine veraltete Objektausnahme ausgelöst.

Lokal deklarieren Der Dialog funktioniert nicht, da er Ereignisse enthält. Wie kann ich das Problem beheben? Das Aufrufen einer neuen Instanz des Dialogfelds ist in Ordnung. Es sollten nur die ursprünglichen Ereignisse im aufrufenden Formular angezeigt werden. (Sie variieren je nach der Form der Dialogform genannt wird)

. (Anmerkung: Ich brauche .show verwenden nicht .showdialog weiterhin Code auf der ursprünglichen Form laufen)

+0

ich vermute AddHandler die Lösung .... – Josh

+0

Eine weitere Option ist 'ShowDialog' zu nennen. Das Formular wird nicht automatisch entsorgt, wenn es nach 'ShowDialog' geschlossen wird –

Antwort

0

OK das Problem gelöst wurde mit :

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click 


    If Batch_Scanner_Dialog.IsDisposed Then 
     Dim Batch_Scanner_Dialog As New CheckoutBatchScanner 
     AddHandler Batch_Scanner_Dialog.Scanned_Item, AddressOf Recieve_Scaned_Object 
     Batch_Scanner_Dialog.Show() 
    Else 
     Batch_Scanner_Dialog.Show() 
    End If 
End Sub