Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [VB2010 WinForm] Serializzazione User Control

    Un saluto a tutti!

    Ho sviluppato uno user control e sono ormai giunto alla fase finale. Inserendolo però in un progetto esistente, specificando quindi la .dll, nel momento in cui trascino il controllo sul form mi da il seguente errore:

    Impossibile creare il componente 'Agenda'. Messaggio di errore: 'System.Runtime.Serialization.SerializationExcepti on: Il tipo ...UserControl' nell' assembly .... non è contrassegnato come serializzabile.

    Ora, mi era già capitato un' altra volta ed avevo risolto ponendo l' attributo <Serializable()> alla classe e tutte le sottoclassi. Questa volta non basta...

    Il codice è il seguente:

    codice:
    <Serializable()> Public Class Agenda
    #Region "Variabili"
        Private WithEvents _Colonne As New ColumnCollection
        Private WithEvents _Appuntamenti As New AppointmentCollection
    #End Region
    
    #Region "Proprietà"
        Public Property Columns As ColumnCollection
            Get
                Return _Colonne
            End Get
            Set(value As ColumnCollection)
                _Colonne = value
                AggiornaColonne()
            End Set
        End Property
        Public Property Appointments As AppointmentCollection
            Get
                Return _Appuntamenti
            End Get
            Set(value As AppointmentCollection)
                Try
                    _Appuntamenti = value
                Catch ex As Exception
    
                End Try
            End Set
        End Property
    #End Region
    End Class
    
    
    <Serializable()> Public Class Column
    #Region "Variabili"
        Private _descrizione As String
        Private _indiceVisualizzazione As Integer
        .............
    #End Region
    
    #Region "Proprietà"
        Public Property Description As String
            Get
                Return _descrizione
            End Get
            Set(value As String)
                Try
                    _descrizione = value
                    RaiseEvent ColumnChanged(Me)
                Catch ex As Exception
                End Try
            End Set
        End Property
        Public Property DisplayIndex As Integer
            Get
                Return _indiceVisualizzazione
            End Get
            Set(value As Integer)
                _indiceVisualizzazione = value
                RaiseEvent ColumnChanged(Me)
            End Set
        End Property
    #End Region
    End Class
    
    <Serializable(), Editor(GetType(ColumnCollection.ColumnCollectionEditor), GetType(Drawing.Design.UITypeEditor))>
    Public Class ColumnCollection
        Inherits System.Collections.ObjectModel.Collection(Of Column)
    
        Friend Shared ListaColonne As List(Of Column)
    
    #Region "Eventi"
        Public Event ColumnAdded(app As Column)
        Public Event ColumnRemoved(app As Column)
        Public Event ColumnChanged(app As Column)
        Public Event ColumnsChanged()
    #End Region
    ....tante altre cose
    ...
    ...
    End Class
    Non vi vorrei tediare con il codice della classe Appointment ed AppointmentCollection ma è la stessa storia ripetuta per la classe Column e ColumnCollection.

    Facendo varie prove mi sono accorto che il problema non si manifesta se nella dichiarazione delle variabili per la classe Agenda tolgo la paraola chiave new:


    Private WithEvents _Colonne As ColumnCollection
    Private WithEvents _Appuntamenti As AppointmentCollection

    Il problema è che poi non riesco a mantenere le colonne impostate in progettazione. Ho provato a lasciare così la dichiarazione delle variabili e ad aggiungere l' inizializzazione nella sub New ma il problema rimane...

    Non so più cosa fare...

    Grazie a tutti!!


    Filippo

  2. #2
    Ho risolto!! Se vi dovesse capitare ho taggato le proprietà Columns ed Appointments con il seguente attributo:
    <DesignerSerializationVisibility(System.ComponentM odel.DesignerSerializationVisibility.Content)>.

    Adesso quindi la parte di codice che funziona è diventata così:
    codice:
    #Region "Proprietà"
        <DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)>
        Public Property Columns As ColumnCollection
            Get
                Return _Colonne
            End Get
            Set(value As ColumnCollection)
                _Colonne = value
                AggiornaColonne()
            End Set
        End Property
        <DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)>
        Public Property Appointments As AppointmentCollection
            Get
                Return _Appuntamenti
            End Get
            Set(value As AppointmentCollection)
                Try
                    _Appuntamenti = value
                Catch ex As Exception
    
                End Try
            End Set
        End Property
    #End Region
    Un saluto a tutti!

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.