Controls Speichern

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von nsjdvv.

    Controls Speichern

    hey,

    ich versuche jetz seit stunden Meine zur Laufzeit erstellten controls,zu speichern,und später wieder zu laden ^^
    Zum speichern habe ich bereit´s ein Code :

    VB.NET-Quellcode

    1. Dim Pfad As String = "C:\Users\Nsjdvv\Desktop\controls.txt"
    2. Dim sw As StreamWriter = File.CreateText(Pfad)
    3. For Each con As Control In Me.Controls
    4. sw.WriteLine(con.Size)
    5. sw.WriteLine(con.Location)
    6. sw.WriteLine(con.Tag)
    7. Next
    8. sw.Flush()
    9. sw.Close()

    Das geht auch...es sind alles Pictureboxen die gespeichert werden müssen,Aber wie lade ich diese wieder? ^^
    Im Gespeicherten Dokument sieht es so aus:

    Quellcode

    1. {Width=40, Height=40}
    2. {X=91,Y=21}
    3. C:\Users\Nsjdvv\Desktop\go.png <---das ist das .Tag der Picturebox

    Und die picture boxen sollen dann wieder ihren Sub zugewiesen bekommen...

    Schoneinmal danke für jede Hilfe ;)

    Lg.
    Nsjdvv
    Man kann keine Controls speichern.
    Man kann nur Daten speichern.

    Vorzugsweise Daten, die in Controls angezeigt werden.

    Zur not kann man auch Daten speichern, aus denen sich Controls generieren lassen, aber ich find das ziemlich unappetitlich

    Und die picture boxen sollen dann wieder ihren Sub zugewiesen bekommen...

    Eine Sub kann man schomal gar nicht abspeichern.
    Aber vlt. weist du ja auch so, welche "Sub zugewiesen werden soll"
    (Subs kann man nichtmal zuweisen, aber ich vermute, du möchtest ein Event abonnieren, das geht mit AddHandler)

    ErfinderDesRades schrieb:


    Zur not kann man auch Daten speichern, aus denen sich Controls generieren lassen, aber ich find das ziemlich unappetitlich
    Aber anders geht es ja nicht oder? ^^
    Die conrols werden ja zur laufzeit erstellt,und wen ich das programm später starte sollen sie wieder da sein...

    ich bräuchte nur ein denkanstoß wie ich sowas hinbekomme:

    Me.Controls.add( "lies aus der textdatei")
    :D

    //Edit:
    ja dan mit addhandler ,so erstelle ich die controls auch^^

    VB.NET-Quellcode

    1. Picturebox_1.Location = pnt
    2. Picturebox_1.Size = New Size(40, 40)
    3. Picturebox_1.Tag = pbtag
    4. Me.Controls.Add(Picturebox_1)
    5. AddHandler Picturebox_1.Click, AddressOf clicken
    6. AddHandler Picturebox_1.MouseEnter, AddressOf picEnter
    man kann controls speichern:
    1. Man nehme ein Control
    2. Man nehme einen BinaryFormatter
    3. Man speichere das Control mithilfe des BinaryFormatters in eine beliebige datei
    4. Man läd die Datei mithilfe des BF als Control aus der Datei wieder heraus
    5. Man fügt dieses Control der Form hinzu
    gl
    Valerian
    Soweit ich weiß, geht das nicht. Gerade wegen der EventHandler

    @ndsjvv:
    Aber anders geht es ja nicht oder? ^^
    Die conrols werden ja zur laufzeit erstellt,und wen ich das programm später starte sollen sie wieder da sein...

    Nur sehr selten gehts nicht anders.
    Ich jdfs. habe noch nie Controls dynamisch erstellen müssen.

    Einmal habe ich einen PictureViewer gemacht, da habe ich von Listbox abgeleitet, und der beigebracht, Vorschau-Bitmaps anzuzeigen. Das war auch nur ein Control.

    Aber üblicherweise würde ich die BildNamen in einem DatagridView anzeigen, und das ausgewählte Bild schön groß in die Picturebox machen
    warum?
    entschuldigung für C# aber man kann es ja übersetzen :)

    Quellcode

    1. ((PictureBox)BinaryFormatter.Deserialise(new FileStream("MeinPfad.Endung"))).Click += new MouseEventHandler(PictureBox_Click);
    (einfach mal hineingecodet)
    gl,
    Valerian

    SystemUnknow schrieb:

    ich versuche jetz seit stunden Meine zur Laufzeit erstellten controls,zu speichern,und später wieder zu laden ^^


    Für was "speichern", die Controls werden zur Laufzeit erstellt.
    weil ich die controls später wieder benutzen möchte ^^

    naja so wie es aussieht is des etwas viel arbeit...dan werde ich das wohl one speichern machen ,bzw. versuchen ein anderen weg zu finden..

    Aber vielen Dank für die Antworten ;)

    ErfinderDesRades schrieb:

    Wie isses mit diesem Ansatz?
    Aber üblicherweise würde ich die BildNamen in einem DatagridView anzeigen, und das ausgewählte Bild schön groß in die Picturebox machen
    Das kannichdir glaub in 20 min basteln

    Find ich sehr nett,aber Bei meinem Programm läuft das alles etwas anders ^^
    Es wird auch Bald im Showroom sein....
    Haptsächlich liegd das problem darin,das der User belibieg viele Pictureboxen erstellen kann -das bild & der (die,das?!) AddHandler, wird automatisch zugewiesen- und diese "einstellungen" sollen nach einem neustart des programmes wieder da sein.....
    Aber ich denke das is sehr viel aufwand...
    aber wie bekomme ich das hin? :D

    zum programm:
    Der user kan irgendwo(bliebig) verknüpfungen auf der form erstellen (zb. eine .exe draufziehen(drag&drop),das wird mit diesem code gemacht:

    VB.NET-Quellcode

    1. Dim pnt As New Point(Me.PointToClient(MousePosition))
    2. Dim Picturebox1 As New PictureBox
    3. Picturebox1.Image = extract_Icon_from_file(werübergabe) 'extract_Icon_from_file ist eine Funktion ,der name sagt alles, wertübergabe ist der pfad
    4. Picturebox1.SizeMode = PictureBoxSizeMode.StretchImage
    5. Picturebox1.Location = pnt
    6. Picturebox1.Size = New Size(40, 40)
    7. Picturebox1.Tag = werübergabe
    8. Me.Controls.Add(Picturebox1)
    9. AddHandler Picturebox1.Click, AddressOf clicken
    10. AddHandler Picturebox1.MouseEnter, AddressOf picEnter


    aber ich weiß nicht wie ich es abspeichern soll,das ich es später wieder auslesen kann...
    Wenn du keine Datenbank verwendest, würde ich wahrscheinlich irgend welche
    Collections verwenden. Während der User Aktion wird die Collection
    mit all den notwendigen Variablen gefüllt. Aus der Collection generierst du
    dann gleich deine Controls. Beim Beenden des Programms speicherst du
    die Collection. Beim Neustart lädst du die Collection neu und rufst erneut
    die Controls-Creation-Procedure auf.

    Also die Useraktionen werden erst in die Collection gespeichert.
    Dann erzeugst du die Controls aus diesen Daten.