Frage zum Vorgehen beim Controls "Ex/Importieren"

  • VB.NET

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

    Frage zum Vorgehen beim Controls "Ex/Importieren"

    Hi,

    ich habe ein Program, dem während der Laufzeit verschiedene Controls hinzugefügt werden können.
    Die betreffenden Controls beinhalten im Wesentlichen Labels, deren Texte verändert werden können.
    Das sollte aber eher nebensächlich sein.

    Jedem Control werden verschiedene Events und auch entsprechende Methoden beim hinzufügen zur Form zugewiesen, damit die Controls "bedienbar" werden.

    Jetzt möchte ich gerene eine Funktion erstellen mit der ich die erstellten Controls "Exportieren" kann, also ein Abbild welches Control welche Labels beinhaltet und wo diese Controls angeordnet sind.
    Das ganze soll dann später wieder Importiert werden, also sollen alle Controls die vorher mal exportiert wurden später wieder auf der Form hergestellt werden können.

    D.h.: ich habe einen "Arbeitsbereich" dem verschiedene Objekte hinzugefügt werden können. Ich möchte ein "Abbild" des Arbeitsbereichts abspeichern und später wieder herstellen können.


    Jetzt möchte ich wissen wie man generell vorgehen muss um so ein Vorhaben zu realisieren.

    - Alle Eigenschaften in XML speichern zum Exportieren und die XML auslesen zum Importieren oder eignet sich etwas anderes besser ?
    - Gibt es bei so einen Vorgehen irgend etwas zu beachten ?
    - Gibt es vielleicht schon irgendwo ein Beispiel / Tutorial zu dem Thema (habe im Forum unter "Tips/Tricks" und im "Sourcecodetausch" nichts gefunden) ?


    mfg
    Was verstehst Du unter Exportieren / Importieren?
    Sie für andere Programme verfügbar machen oder lediglich Daten merken und Zustände wiederherstellen?
    Letzteres: siehe Serialisierung:

    VB.NET-Quellcode

    1. <Serializable()> Public Class MyClass
    2. '...
    3. 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!
    Hi,

    also ich möchte foglendes Szenario erfüllen:
    Benutzer erstellt während der Laufzeit veschiedene Objekte (Controls) und verschiebt sie auf der Form so wie er es will.
    Dann speichert der Benutzer seine "Arbeitsfläche", also alle Controls , samt deren Position.
    Dann kann der Benutzer das Programm beenden und später starten und die zuvor gespeicherte "Arbeitsfläche" wieder laden.

    Es soll also so sein wie wenn man irgendein Spiel spielt und dort aktuelle Spielstände abspeichert, welche später wieder geladen werden können.


    mfg
    Dann sieh Dir folgendes an:

    VB.NET-Quellcode

    1. <Serializable()> Public Class MyClass
    2. '...
    3. End Class
    da werden Instanzen von Klassen als Datei gespeichert und wieder geladen.
    Pack in eine solche Klasse Deine Information, die Du Dir merken willst und fertig.
    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!
    Hi,

    habe mir mal das passende beispiel in der MSDN angeschaut, und auf den ersten Blick sieht es so aus als wäre das was ich benötige.
    Aber, da den Controls welche ich "speicher" möchte , von mir auch noch über eine AddHandler Methode zugewiesen wird was passieren soll wenn man sie klickt/doppelklickt, werden die zugehörigen Informationen beim Serialisieren ebenfals abgespeichert?

    Was ich mir überlegt habe, ist das ich die Controls in meiner Form in einer Schleife durchlaufe und mir von jedem betreffenden Control den Namen, die Location und andere Informationen speicher.
    Dadurch kann ich beim "laden" der Controls in einer schleife über "AddHandler" den Controls wieder ihre Routine zuweisen.

    Hier mal eine Pseudo Code um evtl etwas klarer zu machen was ich meine, hier sollen die Controls gespeichert werden.

    VB.NET-Quellcode

    1. ...
    2. For Each c As MeinControl In Me.Controls
    3. WriteControleNameToFile(c.name, c.Location)
    4. For Each lbl As Label In c
    5. WriteControlLabelToFile(c, lbl.Name, lbl.Location)
    6. Next
    7. Next
    8. ...


    Beim Auslesen der Datei müsste diese dann wieder in einer Schleife durchlaufen werden um über "Me.Control.Add()" die gespeicherten Controls der Form hinzuzufügen.

    Ich werde mir mal die Serialize Klasse genauer ansehen.

    Leider kann ich die erstellte XML Datei aus dem MSDN Beispiel nicht öffnen um mir die Struktur einer XML Datei anzusehen, aber das scheint so etwas zu sein was ich suche, ich werde mir das die Tage mal genauer anschauen.

    Danke.


    mfg
    Hi,

    Thema ist erledigt, habe mir die XML Geschichte mal angesehen.
    Konnte mit folgender Routine die Controls recht gut "auslagern".

    VB.NET-Quellcode

    1. ...
    2. Sub XMLWrite()
    3. Dim types As New List(Of String)
    4. For Each t As Object In ObjList
    5. If Not types.Contains(t.GetType.ToString) Then
    6. types.Add(t.GetType.ToString)
    7. End If
    8. Next
    9. Dim enc As New System.Text.UnicodeEncoding
    10. Dim XMLobj As Xml.XmlTextWriter = New Xml.XmlTextWriter("data.xml", enc)
    11. With XMLobj
    12. .Formatting = Xml.Formatting.Indented
    13. .Indentation = 4
    14. .WriteStartDocument()
    15. .WriteStartElement("Controls")
    16. For Each s As String In types
    17. .WriteStartElement(s)
    18. For Each c As Control In ObjList
    19. If c.GetType.ToString = s Then
    20. .WriteStartElement(c.Name)
    21. .WriteAttributeString("Text", c.Text)
    22. .WriteAttributeString("Location", c.Location.ToString)
    23. .WriteEndElement()
    24. End If
    25. Next
    26. .WriteEndElement()
    27. Next
    28. .WriteEndElement()
    29. .Close()
    30. End With
    31. End Sub...



    mfg