Form bleibt nach Schließen als "Grafikschrott" angezeigt

  • VB.NET
  • .NET (FX) 4.0

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von magicneo.

    Form bleibt nach Schließen als "Grafikschrott" angezeigt

    Hallo zusammen,

    ich habe ein Problem mit einer Form. Ich rufe diese Form aus verschiedenen Sub Routinen auf. Zum Aufrufen und Schließen der Form benutze ich aber inmmer die selben Sub Routinen, die ich auf Public gesetzt habe.
    Beende und schließe ich die Form aus der einen Sub Routine, klappt alles wunschgemäß. Beende und schließe ich dir Form aus einer anderen Sub Routine, bleibt auf dem Bildschirm die Form als "Grafikschrott" scheinbar sichtbar.

    Kann mir jemand helfen, dieses Problem zu lösen. Ich tappe da völlig im Dunkeln.

    Vilen Dank und viele Grüße

    Maddin
    Hu, das ist a bisserl aufwendig, da ich mit vielen Sub Routinen arbeite. Ist ein größeres Programm mit inzwischen 20 Fenstern und ich benutze Sub Routinen "kreuz und quer".

    Hab es glaub gerade eben gefunden :

    Ich schließe mit den üblichen Funktionen

    Me.Hide() bzw Me.Close()

    Jetzt habe ich noch

    Me.Finalize()

    eingefügt. Das bereingt wohl und gibt das eine oder andere frei, das nicht mehr "benötigt" wird
    Das scheint gut zu funktionieren.

    Vielen Dank erst mal

    Maddin
    Du musst die Formen auf jeden Fall neu instanzieren: Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Lese dir diesen Beitrag dazu mal durch.

    Wenn es nach diesem Schema machst brauchst du auch kein Finalize sondern reicht ein Me.Close.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    @fichz Jou.

    magicneo schrieb:

    "Grafikschrott"
    Die darunter liegende Form wird nicht ordnungsgemäß upgedatet.

    magicneo schrieb:

    Me.Finalize()
    ist völlig daneben.
    Poste mal den kompletten Code.
    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!

    RodFromGermany schrieb:

    ist völlig daneben.


    Ist diese Ausdrucksweise hier üblich?

    Ich öffne die Form mit Load() und Show() und benutze Hide(), um sie "in den Hintergrund" zu legen oder Close(), um sie zu schließen.

    Form.Load()
    ...
    Me.Show()
    ...
    Me.Hide()
    ...
    Me.Close()

    Was ist an Finalize "völlig daneben", wenn es aber doch funktioniert??? ?(

    Viele Grüße

    Martin

    magicneo schrieb:

    völlig daneben
    ist es, da Finalize() auf unmanaged Ressourcen zielt, gugst Du hier.
    Wenn in einem Dialog unmanaged Ressourcen verwendet werden, müssen diese separat in der Dialog-Prozedur .Dispose() mit Finalize() aufgeräumt werden, nicht aber der Dialog selbst.
    ------
    Mit welcher Ausdrucksweise möchtest Du darauf hingewiesen werden, dass da suboptimale Befehle bzw. Befehlsfolgen stehen :?:
    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!
    Hallo RodFromGermany,

    nun, ich bezeichne mich mal als "anbitionierter Hobby Programmierer", bin aber auf keinen Fall Profi - bin aber auf den Weg dahin.
    Aus diesem Grund verstehe ich von manche´n Beiträgen kaum die Hälfte, da mir die gesamten Fachbegriffe etc. noch nicht geläufig sind.
    Aber ich arbeite dran ... :)
    Inzwischen weiß ich auch, was damit gemeint ist, wenn man eine Form instanziert. Und wie man das macht.
    Es gibt da sicher noch einige Dinge, die ich besser und proffesioneller machen kann und werde.
    Als Ausdruckweise wünsche ich mir eine etwas höflichere Umgangsform. Das hat was mit Respekt und Achtung zu tun.

    Vielleicht kannst Du mir die nächste Frage auch gleich beantworten: gibt es für .net 4.0 VB 2010 Office 64Bit Bibliotheken - z.B. Microsoft. Office.Interop.Excel aber eben als 64 Bit Version? Ich habe nichts gefunden. Ich möchte eine reine 64 Bit Anwendung schreiben.
    Ich habe nur die Office.Tools gefunden.

    Vielen Dank, viele Grüße und ein schönes Osterfest an alle

    Martin

    magicneo schrieb:

    Das hat was mit Respekt und Achtung zu tun.

    Ich kann dir nur empfehlen, die Sichtweise bischen zu ändern.
    Bei der Kommunikation übers Proggen kommt es nicht auf sozialverträgliche Ausdrucksweise an - weil da hat jeder seine eigene Geschichte und Interpretations-Gewohnheiten.
    Sondern es kommt an auf inhaltliche Präzision der Aussagen.
    Wenn Rod einen Finalizer "völlig daneben" findet, dann ist das eine inhaltliche Aussage, eben dass man sowas nicht bringen kann - es ist schlecht programmiert, fehlerträchtig, whatever. Eben "daneben" - ist doch knapp und präzise formuliert.
    Diese Aussage ist zu deiner Hilfe, und berührt in keiner Weise den Respekt, den er dir entgegenbringt.

    Es ist einfach nur unmissverständlich klar ausgedrückt, was er sagen will.

    Natürlich lässt sich niemand gerne sagen, dass er was schlecht programmiert hat. Aber so Empfindlichkeiten dürfen uns nicht davon abhalten lassen, es zu sagen, wo es notwendig ist. Grad so unangenehme Wahrheiten sind die hilfreichen - wie gesagt: das tut dem Respekt füreinander keinen Abruch.

    Also ich empfehle, Forenposts maximal unemotional zu lesen, und immer möglichst wohlwollend zu interpretieren. Selbst wenn das mal nicht geht, und einer schlägt eindeutig und unübersehbar über die Stränge - naja jeder hat mal einen schlechten Tag, manche Pappenheimer sogar viele davon, aber auch das ist egal.
    Selbst von völlig unsympatischen Kotzbrocken kann man manchmal echt dolle Tricks lernen. Lass sie doch krakeelen wie sie wollen, und profitiere trotzdem von ihrem inhaltlichen KnowHow.

    Wobei RFG sicher keiner dieser Pappenheimer ist ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Vielen Dank für Deinen ausführlichen Kommentar, Erfinder

    mit dieser Darstellung kann ich wesentlich besser umgehen als mit der anderen - mir ist völlig klar, dass diese Empfindlichkeiten natürlich mein persönliches Thema sind und nicht wirklich die Ausdrucksweise von RFG. Damit kommen wir aber auf eine Ebene über die man sich mal persönlich bei nem Bierchen unterhalten kann ;) . Ich nehme die Herausforderung und Deine Ratschläge gerne an - und die von RFG natürlich auch.

    magicneo schrieb:

    Office.Interop.Excel aber eben als 64 Bit Version
    hängt davon ab, was an Excel auf eben diesem PC installiert ist. Das hat mit dem Studio (das selbst nur als 32 Bit Anwendung läuft) nix zu tun.
    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!
    Hallo RFG,

    tja ... wenn ich das alles so richtig verstanden und interpretiert habe, ist zwar auf dem PC Office 2007 als 64 Bit Version installiert - angeboten werden mir aber dennoch "nur" die 32 Bit Versionen der Bibliotheken.
    Nach einigen Recherchen habe ich mich dazu entschlossen, mein Programm in einen separaten reinen 64 Bit Teil und einen separaten reinen 32 Bit Teil aufzuteilen. Ich erhoffe mir dadurch ein stabileres Programm.

    magicneo schrieb:

    mein Programm in einen separaten reinen 64 Bit Teil und einen separaten reinen 32 Bit Teil aufzuteilen.
    Wie soll das funktionieren?
    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!
    Nun, ich starte den 64 Bit Programm Teil (also in Form einer exe). Dieser erzeugt z.B. eine csv Datei. Danach rufe ich aus dem 64 Bit Programm eine separate exe auf - das ist der 32 Bit Teil. Das mache ich mit Process.Start(...) . Beim Aufrufen übergebe ich ein paar Optionen - z.B. den Pfad für die csv Datei. Das 32 Bit Programm liest diese csv Datei ein und verarbeitet diese. Nachdem es fertig ist, erzeugt die 32 Bit exe eine "Dummy Datei". Auf diese Datei "wartet" das 64 Bit Programm und wenn es dieses Datei in einem bestimmten Verzeichnis vorhanden ist, macht das 64 Bit Programm weiter.

    So funzt es jedenfalls.

    magicneo schrieb:

    mein Programm in einen separaten reinen 64 Bit Teil und einen separaten reinen 32 Bit Teil aufzuteilen.

    magicneo schrieb:

    eine separate exe
    Aha. 2 disjunkte Programme also.
    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!

    magicneo schrieb:

    das bedeuted
    dass die beiden Programme eigentlich nix miteinander zu tun haben.
    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!