WindowsForm lässt sich nicht mehr öffnen nach schließen

  • Allgemein

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    WindowsForm lässt sich nicht mehr öffnen nach schließen

    Hallo Zusammen :)

    Ich schreibe gerade ein Add-In und hänge an folgendem Problem:
    WindowsForms lassen sich nicht mehrmals öffnen und schließen. Nachdem ersten mal schließen bricht das Programm ab, wenn das Fenster wieder geöffnet werden soll.
    Der Ablauf:
    Ich rufe eine Windowsform "InfoBahnerstellen " auf in "Form_Groß":

    VB.NET-Quellcode

    1. Public Class Form_Groß
    2. Dim oInfoBahnerstellen As Form_InfoBahnerstellen = New Form_InfoBahnerstellen
    3. Private Sub ButtonInfoBreite_Click(sender As System.Object, e As System.EventArgs) Handles ButtonInfoBahnerstellen.Click
    4. oInfoBahnerstellen.Show()
    5. End Sub
    6. End Class


    Wenn ich nun die InfoBahnerstellen Form schließe lässt diese sich nicht mehr aufrufen. Es kommt folgende Fehlermeldung:
    ''************** Ausnahmetext **************
    ''System.ObjectDisposedException: Auf das verworfene Objekt kann nicht zugegriffen werden.
    ''Objektname: "Form_InfoBahnerstellen".

    Ich hab versucht den Roten-X-Close-Button zu überschreiben damit das Objekt nicht verworfen wird:

    VB.NET-Quellcode

    1. Private Sub Form_InfoBahnerstellen_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    2. MsgBox("Close button reagiert")
    3. Me.Hide()
    4. End Sub


    Es kommt leider dieselbe Fehlermeldung mti demselben Ausnahmetext wie oben.

    Hat jmd eine Idee?

    Schöne Grüße und Guten Rutsch

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „colli“ ()

    Da ist die Lösung:
    Instanziierung von Forms und Aufruf von Dialogen

    Oh, ich habe die Instanz gar nicht gesehen, sorry, dann hat sich das erledigt. ^^
    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    colli schrieb:

    VB.NET-Quellcode

    1. Dim oInfoBahnerstellen As Form_InfoBahnerstellen = New Form_InfoBahnerstellen
    Wann ganz genau wird dieser Code aufgerufen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das ganze ist ein CAD Programm Add-In. Ich bin hab ein Button in das bereits existierende CAD Menü eingefügt. Wenn der Button geklickt wird öffent sich die WindowsForm Public Class Form_Groß

    VB.NET-Quellcode

    1. Public Class Form_Groß
    2. Dim oInfoBahnerstellen As Form_InfoBahnerstellen = New Form_InfoBahnerstellen
    3. Private Sub ButtonInfoBreite_Click(sender As System.Object, e As System.EventArgs) Handles ButtonInfoBahnerstellen.Click
    4. oInfoBahnerstellen.Show()
    5. End Sub
    6. End Class

    Auf der Form_Groß ist ein Button der bei click die WindowsForm Public Class Form_InfoBahnerstellen aufruft:

    VB.NET-Quellcode

    1. Public Class Form_InfoBahnerstellen
    2. Private Sub Form_InfoBahnerstellen_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. End Sub
    4. Private Sub Form_InfoBahnerstellen_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    5. MsgBox("Close button reagiert")
    6. ''Trotz Me.Hide() wird die form beim nächsten mal nicht mehr geöffnet bzw das objekt nicht mehr gefunden, siehe Ausnahmetext vom Debugger
    7. ''************** Ausnahmetext **************
    8. ''System.ObjectDisposedException: Auf das verworfene Objekt kann nicht zugegriffen werden.
    9. ''Objektname: "Form_InfoBahnerstellen".
    10. 'Me.Hide()
    11. End Sub
    12. End Class

    colli schrieb:

    bei click
    Völlig daneben, setzen, durchgefallen. ;(
    Diese Zeile Code wird vor dem Code im Konstruktor der aufrufenden Klasse aufgerufen, und das ist nicht gut, denn zu diesem Zeitpunkt gibt es noch nix an Form-Instanzen.
    Mach das besser so:

    VB.NET-Quellcode

    1. Public Class Form_Groß
    2. Dim oInfoBahnerstellen As Form_InfoBahnerstellen
    3. Public Sub New()
    4. InitializeComponent()
    5. oInfoBahnerstellen = New Form_InfoBahnerstellen
    6. End Sub
    7. ' ...
    8. End Class
    Und:
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für die Antwort. Ich hab aber grad nach langem random Rumprobieren zufällig rausgefunden worans liegt.
    Man darf die Objekte um Windowsforms aufzurufen nur in der der
    Button-Click-Sub Instanziieren. Jetzt können die Fenster ohne Probleme
    mehrmals geöffnet und geschlossen werden.

    VB.NET-Quellcode

    1. Public Class Form_Groß
    2. ''Wichtig! Objekte in den Subs Instanzzieren. Nicht hier vor den Subs z.B.
    3. ''Dim oForm_Bahnerstellen As Form_Bahnerstellen = New Form_Bahnerstellen
    4. ''Sonst können WindowsForms nach dem schließen nicht mehr geöffnet werden
    5. Private Sub Button1_Click_1(sender As System.Object, e As System.EventArgs) Handles ButtonBahnerstellen.Click
    6. Dim oForm_Bahnerstellen As Form_Bahnerstellen = New Form_Bahnerstellen
    7. oForm_Bahnerstellen.Show()
    8. End Sub
    9. End Class

    colli schrieb:

    Jetzt können die Fenster ohne Probleme mehrmals geöffnet und geschlossen werden.
    Diese Problembeschreibung gehört in den Eröffnungspost, und den Link zum richtigen Instanziieren von Dialogen hast Du in Post #2 bereits überlesen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Für mich war der Titel eig recht aussagekräftig was das Problem angeht. Ich hab den 1. Post enstsprechend geändert.
    Den Link im 2.Post hab ich gelesen und durchprobiert. Darüber bin ich auch zufällig auf die Lösung gekommen, weil ich rumprobiert habe. Ich bin garnicht davon ausgegangen das ich falsch Instanziiert haben könnte, nachdem der 2. Post mit dem Link wieder duchgestrichen wurde und dabei stand das es anscheinend nicht an der Instanz liegt.

    colli schrieb:

    wieder duchgestrichen wurde
    Ja, so ist das.
    Da war die unpräzise Problembeschreibung Schuld.
    Klar, dass Du verstehst, was Du geschrieben hast. Nur wir müssen das auch tun, um Dir helfen zu können.
    Wenn Du merkst, dass Du falsch verstanden worden bist, musst Du die Problembeschreibung präzisieren. :thumbup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!