Form schließen und ListView Items

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Form schließen und ListView Items

    Hallo,

    könnt Ihr mir bitte mal eine grundsätzliche Frage beantworten?
    Wenn ich ein Form mit dem dem Kreuz in der oberen rechten Ecke schließe, wird dann das Form und dessen Inhalt immer zurück gesetzt? Kann man das verhindern.
    Ein Problem wird das für mich bei einem ListView, das sich in einem Form befindet, das erst nach einem Button-Event sichtbar wird. Der ListView wird zum Programmstart mit Inhalten befüllt.
    Wenn ich die Form mit dem ListView dann per Button öffne, wird der Inhalt des ListView korrekt angezeigt.
    Wenn ich dann jedoch die Form mit dem X oben rechts schließe und danach mit dem Button wieder öffne ist der Inhalt weg.
    Gibt es hier eine Möglichkeit dies zu vermeiden?

    Danke Euch!
    Gruß
    .. wurde die Form geclosed und gehided?
    Lädst du die Items in der Form, wo sich auch der Button befindet mit der du die Form öffnest.
    Es kann sein, das die Items nach dem 2. öffnen nicht mehr geladen werden.
    Welches Event verwendest du?

    Ich bin etwas außer Übung, da ich lange mit C und LUA gearbeitet habe.. viel Erfolg!
    Hi Panavia

    Ich weiß nicht genau wie dein Code aussieht, aber ich würde dir empfehlen den Code mit dem du die Listbox füllst ins Load-Event deiner zweiten Form zu schreiben, bzw. das ganze in ne Funktion/nen Sub fassen und im Load-Event aufrufen.

    mfg buschmanR :)
    Jetzt. Oder du kannst es über die Main_Form ausführen. Je nach dem, die dein Programm arbeitet.. welche Struktur dein Programm hat.
    Es wäre sehr nett, wenn du ein Codeschnipsel geben könntest-- das würde helfen, dir zu helfen! :D
    Also ich gehe mal davon aus, dass die Form mit dem X geschlossen wird. Das wäre jetzt meine Frage, was mit der Form passiert.
    Der ListView befindet sich in einer eigenen Form. Der Button ist in meiner "MainForm" und der öffnet dann die Form mit dem ListView im Vordergrund zur Auswahl.
    Momentan habe ich es als Übergangslösung tatsächlich so gelöst, dass der ListView beim Button.Click Event gefüllt und dann mit Form.Show geöffnet wird.
    Ich wollte Ressourcen sparen und eben nicht beim öffnen des Forms jedes mal die ListView neu befüllen. Aber wenn das so gemacht wird...
    Wie gesagt würde mir eine Lösung, durch die der ListView beim Schließen der Form nicht geleert wird besser gefallen.
    Wir könnten dir besser helfen wenn du genauer beschreiben würdest was du machen willst. Je nachdem wie kompley dein Programm ist gibt es mehr oder weniger nützliche Lösungen.
    Hilfreich wäre der Code um den es geht.

    mfg buschmanR =)
    z.B.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
    2. 'Dein Code oder was auch immer
    3. End


    Es fällt uns schwierig dir bei sowas simplen zu helfen, da ein kleiner Informationsmangel herrscht.
    OK, sorry. Ich habe aber doch kein Problem mit dem Befüllen des ListView, sondern damit, dass dieses beim Schließen des Forms geleert wird...
    Davon habe ich leider keinen Code. Wie gesagt, wenn ich auch das X in der oberen rechten Ecke klicke und das Form erneut öffne ist der ListView leer...
    Wenn Du bei Form_Closing über e.Cancel = True den Schließen-Vorgang beendest und dann über Me.Hide() die Form unsichtbar machst, sollte alles funktionieren:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private dlg As Form2
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. If dlg Is Nothing OrElse dlg.IsDisposed Then
    5. dlg = New Form2
    6. End If
    7. If Not dlg.Visible Then
    8. dlg.Show() ' nicht modaler Dialog
    9. End If
    10. End Sub
    11. End Class

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub Form2_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    3. e.Cancel = True
    4. Me.Hide() ' unsichtbar machen
    5. End Sub
    6. End Class
    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!
    ja - typische Holzweg-Lösung: Weil man Daten und Oberfläche nicht getrennt hat, wird die Oberfläche am Leben erhalten, auch wenn sie eigentlich geschlossen wird.

    @TE: derlei Workarounds kommen noch einige auf dich zu, solange du Controls zur Datenhaltung mißbrauchst. ;)
    ich komme ja immer mit Databinding: Daten laden, speichern, verarbeiten

    aBER auch damit ist formübergreifende Kommunikation nicht einfach. Weil der Witz an Databinding ist, dass alle Controls ans selbe Datenmodell gebunden sind, aber bei formübergreifend entblödet sich jedes Form, eine eigene Datenmodell-Instanz (das Dataset) zu halten, jedenfalls wenn man die Bindings im Designer designen will, und dazu gibts keine gute Alternative.

    Also muß man alle BindingSources von allen Forms, die an ein Dataset gebunden sind, umstöpseln auf ein einziges Dataset für alle, und dann funzt Databinding auch formübergreifend.