Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    105

    [VB.NET]Serializzazione controlli utente

    Salve a tutti.
    Allora ho creato un controllo utente che fa parte di un Panel e vengono generate delle istanze a runtime tramite un pulsante.
    Ora il mio problema è che io voglio salvare su un file le varie istanze del controllo utente (perchè di ognuna l'utente può cambiare le proprietà) e non conoscendo quante istanze l'utente possa aver creato mi tornerebbe utile poter far salvare "così com'è" l'istanza su un file e poi ricaricarla successivamente.
    Il problema è che l' "UserControl" non è serializzabile, quindi è un casino.
    non è che esiste un modo per "forzare" la serializzazione? oppure altri metodi già "preimpacchettati" per fare questo tipo di operazioni?

    O mi tocca creare delle funzioni apposta e ciclare tutte le istanze per salvare le proprietà di ogni istanza?

    grazie mille a tutti

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    105
    Son riuscito a fare qualcosa, il codice che ho inserito è questo:
    codice:
    Imports System.IO
    Imports System.Runtime.Serialization.Formatters.Binary
    Imports System.Xml.Serialization
    Imports System.Runtime.Serialization
    
    Public Class ArrayKeyButtonBox
    
        Private Sub ArrayKeyButtonBox_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim tempsave As New SaveImp(PConBoxInternal.Controls.Item(0))
            VSBLatBar.Visible = True
            VSBLatBar.Enabled = False
            If File.Exists("SavedKeys.bin") Then
                Dim myFileStream As Stream = File.OpenRead("SavedKeys.bin")
                'Dim deserializer As New BinaryFormatter()
                Dim deserializer As New XmlSerializer(tempsave.GetType)
                tempsave = CType(deserializer.Deserialize(myFileStream), SaveImp)
                myFileStream.Close()
            End If
            PConBoxInternal.Controls.Add(tempsave.SavePanel)
        End Sub
    
        Private Sub BSalva_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BSalva.Click
            MsgBox("salvato")
            Dim tempsave As New SaveImp(PConBoxInternal.Controls.Item(0))
            Dim myFileStream As Stream = File.Create("SavedKeys.bin")
            'Dim serializer As New BinaryFormatter()
            Dim serializer As New XmlSerializer(tempsave.GetType)
            serializer.Serialize(myFileStream, tempsave)
            myFileStream.Close()
        End Sub
    End Class
    
    <System.Serializable()>Public Class SaveImp
        Public SavePanel As KeyButtonBox
        Public Sub New()
    
        End Sub
        Public Sub New(ByVal pan As KeyButtonBox)
            SavePanel = pan
        End Sub
    End Class
    Ho usato XMLSerializer (perchè ho letto che in teoria serializza tutti i tipi di oggetto senza aver bisogno del '<System.Serializable()>', correggetemi se sbaglio).

    Però quando clicco sul pulsante per salvare mi da questo errore:
    InvalidOperationException non è stata gestita.
    Errore nella reflection del tipo 'KeyButtonBox.SaveImp'.

    Come posso fare per risolvere questo problema?

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    I controlli non sono serializzabili in quanto contengono informazioni relative al contesto in cui vengono creati, visualizzati o più in generale gestiti da Windows, analogamente a quanto può accadere con una connessione a database.

    Nel tuo caso, puoi prevedere di creare oggetti ex-novo che consentano di memorizzare le informazioni relative ai controlli da ricreare, oppure interagire - se possibile (prova a ricercare l'argomento CodeProvider) - con la parte del framework che gestisce la rappresentazione dei componenti tramite codice, e salvare in quel formato la personalizzazione dei controlli inseriti e delle loro proprietà.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    105
    peccato non si possa.
    Comunque grazie mille proverò la soluzione che mi hai detto tu.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.