Menustrip speichern/laden

  • VB.NET

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

    Menustrip speichern/laden

    Hi,

    ich möchte in mein Programm ein Menustrip einbauen. Dies soll der Benutzer nach belieben ändern können. Also die Position/den Owner der einzelnen Items ändern.
    Das ganze soll dann in einer XML-Datei gespeichert und wieder geladen werden.

    Wie speichere ich nun das MenuStrip bzw. die Items am besten, dass ich diese wieder in richtiger Reihenfolge einfügen kann?

    MfG T1g0r
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Emmm...
    Ich hab ja vor, das ganze in einer XML-Datei zu speichern.
    Oder was meinst du jetzt mit XML benutzen?
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Ich glaube du hast mich valsch verstanden. Wie ich in XML speichere und lade ist mir soweit klar.
    Mir geht es eher um das Menustrip. Wie kann ich es am einfachsten speichern, um es später wieder zu laden?
    Sollte ich für jedes Item ein neues XML-Element erstellen?
    Oder kann man das Menu irgendwie in der kompleten Struktur auf einmal in der XML speichern?
    Wie gehe ich da am besten vor?
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Ich weis einfach nicht genau wie ich das speichern soll, wie ich da vorgehen soll.
    Jedes Item durchlaufen und in ein eigenes Element speichern finde ich nicht so toll, da es mit dem Laden wiederum blöd ist bei den verschiedenen Childitems. Irgendwie den Index speichern wäre ok. Also Datei hat Index 1, Bearbeiten den Index 2, Öffnen den Index 1.1 also ein Child von Datei, usw..
    Dann könnte ich vielleicht die Daten so aus der XML laden. Zuerst die "Grunditems", dann die nächsten Childs (1.1, 1.2, 2.1, ...) usw.

    Da der Benutzer noch einstellen können soll, in welcher Reihenfolge und in welchem Parent ein Item liegt, muss ich das ja noch in einem Element anzeigen. Beispielsweise in einem TreeView.
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    ich würde das ganze anders machen
    ist zwar etwas anders aber das ist eig genau das was man hier braucht ohne viel Code
    Stichwort: Serialize/Deserialize

    VB.NET-Quellcode

    1. Private Sub Serialize(ByVal path As String, ByVal lv As ListView)
    2. Dim f As New IO.FileStream(path, IO.FileMode.Create)
    3. Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
    4. Dim l(lv.Items.Count - 1) As ListViewItem
    5. lv.Items.CopyTo(l, 0)
    6. bf.Serialize(f, l)
    7. f.Close()
    8. End Sub
    9. Private Sub Deserialize(ByVal path As String, ByVal lv As ListView)
    10. Dim f As New IO.FileStream(path, IO.FileMode.Open)
    11. Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
    12. lv.Items.Clear()
    13. lv.Items.AddRange(bf.Deserialize(f))
    14. f.Close()
    15. End Sub
    Klingt schonmal gut, und funktioniert mit dem ListView auch.
    Wenn ich den Code aber auf das MenuStrip umschreibe, bekomme ich die Meldung:

    Quellcode

    1. Der Typ "System.Windows.Forms.ToolStripMenuItem" in Assembly "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ist nicht als serialisierbar gekennzeichnet.


    Das heist also, das man dass nicht auf ToolStripMenuItems anwenden kann, oder gibts da ne andere Möglichkeit?
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    schade

    naja du kannst eine eigene Komponente mit dem Tag <Serialisable> kennzeichnen
    aber ne eigene Klasse die mit Inherited System.Windows.Forms.ToolStripMenuItem und mit dem Tag kennzeichnen wird glaub auch nicht funktionieren
    versuch es mal
    Ne leider nicht.
    Schade...
    Das sollte doch auch mit Treeviews funktionieren. Aber ich kann kein TreeViewItem auswählen... Eine Ahnung warum?

    //EDIT

    Es sind ja TreeNodes und nicht TreeViewItems...
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia

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