Feedback zu DB-Extension: DataTableAttach-Exception

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Feedback zu DB-Extension: DataTableAttach-Exception

    Hi!

    Wenn ich mit DB-Extension arbeite und eine Form mit ShowDialog über eine Hauptform 2x öffne und schließe :!: ,
    erscheint beim 2.mal unten angehängte Exception :?: (ausgelöst in Zeile 14 der Hauptform)

    Wird beim Schließen des Dialoges das Registrieren nicht wieder rückgängig gemacht, oder denke ich da als Laie falsch?

    Beispiel Hauptform:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private myTestDts As New TestData
    3. Private xmlFile As String = "..\..\TestData.xml"
    4. Private mySuchForm As New frmSuchen
    5. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    6. Me.myTestDts.Register(Me)
    7. Me.myTestDts.DataFile(xmlFile).Fill()
    8. AddHandler Me.FormClosing, myTestDts.HandleFormClosing
    9. End Sub
    10. Private Sub btn_Click(sender As System.Object, e As System.EventArgs) Handles btnSuchen.Click
    11. If tbxSuchtext.Text.Length = 0 Then Return
    12. If mySuchForm.ShowSuchDialog(tbxSuchtext.Text) Then
    13. MsgBox("Eingabe gefunden !!!")
    14. Else
    15. MsgBox("keine Ergebnis !!!")
    16. End If
    17. End Sub
    18. End Class

    Beispiel des aufgerufenen Dialoges:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports Versuch.TestData
    2. Public Class frmSuchen
    3. Private myTestDts As New TestData
    4. Private xmlFile As String = "..\..\TestData.xml"
    5. Private myList As DataView
    6. Private Sub Suchen_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    7. AddHandler Me.FormClosing, myTestDts.HandleFormClosing
    8. End Sub
    9. Friend Function ShowSuchDialog(Param As String) As Boolean
    10. If Param.Length = 0 Then Return False
    11. Me.myTestDts.Register(Me)
    12. Me.myTestDts.DataFile(xmlFile).Fill()
    13. tbxSuchtext.Text = Param
    14. Dim i = DatasBindingSource.FindX("Bezeichnung", Param)
    15. If i >= 0 Then
    16. btnOk.Text = "Gefunden"
    17. ShowSuchDialog = True
    18. Else
    19. btnOk.Text = "Unbekannt"
    20. ShowSuchDialog = False
    21. End If
    22. Me.ShowDialog()
    23. End Function
    24. Private Sub btnOk_Click(sender As System.Object, e As System.EventArgs) Handles btnOk.Click
    25. Me.Close()
    26. End Sub
    27. End Class


    lg
    VB1963
    Bilder
    • Exception1.png

      95,04 kB, 1.212×860, 59 mal angesehen
    jo, du machst genau das, was die Exception vermutet: Dasselbe Form wird zweimal registriert.

    Verlege doch die Registrierung ins Form_Load, vlt. hilft das schon. Kannsteja auch per Haltepunkt testen, ob Form_Load bei mehrmaligen Öffnen jedesmal durchlaufen wird, oder nur beim erstmaligen.

    Wenns jedesmal durchlaufen wird, musste noch weiter an den Anfang gehen - Sub New, hinter InitializeComponents() (hoffe jdfs., das das hinhaut, getestet habichdas nochnicht)
    @EDR: Danke für deine Hinweise!

    Beim FormLoad hatte ich die Registrierung schon versucht - aber leider auch mit obiger Ausnahme.
    Das mit dem Sub New() hat zwar ohne Ausnahme funktioniert.
    Der Rückgabewert wird nach dem Schließen richtig ausgegeben
    aber der Dialog wird beim 2. Aufruf dann leer angezeigt? :whistling:
    Ein Me.Refresh() im Shown-Ereignis brachte auch kein Ergebnis.
    Wo kommen da die Controls in der Form hin?

    Ist es möglich, eine mehrmalige Registrierung der Form abzufangen :?: ...

    Hier die Registrierung im New():
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub New()
    2. MyBase.New()
    3. ' Dieser Aufruf ist für den Designer erforderlich.
    4. InitializeComponent()
    5. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
    6. Me.myTestDts.Register(Me)
    7. End Sub
    Bilder
    • leerer Dialog.jpg

      129,16 kB, 1.073×1.085, 37 mal angesehen

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VB1963“ ()

    Hat garnix mit meine Extensions zu tun. Es ist unüblich, mit ShowDialog dasselbe Form mehrmals anzuzeigen - üblicherweise erstellt man jedesmal ein neues.
    Das Anzeigen ist nicht das Problem, sondern das Schließen:

    VB.NET-Quellcode

    1. Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
    2. Me.Close()
    3. End Sub

    Me.Close Disposed die aufsitzenden Controls, also ein Form, was so geschlossen wurde kann nicht mehr sinnvoll neu eröffnet werden.

    einfachste Lösung: schließe das Form mit Me.Hide.