c4rr3r4
Messages postés16Date d'inscriptionjeudi 20 décembre 2007StatutMembreDernière intervention 4 juin 2012
-
7 févr. 2011 à 17:09
c4rr3r4
Messages postés16Date d'inscriptionjeudi 20 décembre 2007StatutMembreDernière intervention 4 juin 2012
-
7 févr. 2011 à 19:21
Bonjour,
je rencontre un petit soucis avec l'interface Iserialisable.
Je voudrais enregistrer (sérialiser) dans un fichier binaire tous les objets contenus dans un panel. Ces objets sont des boutons on/off qui héritent de checkbox. Les checkbox n'étant pas sérializable, j'implémente donc ma classe avec Iserializable comme ceci (c'est le code expliqué sur msdn) :
Imports System.Runtime.Serialization
Imports System.Security.Permissions
<Serializable()>
Public Class CommandeONOFF
Inherits CheckBox
Implements ISerializable
' This is the one instance of this type.
Private Shared ReadOnly theOneObject As New CommandeONOFF
#Region "Propriétés"
Public Property NumAutomate As String
Public Property bitN As String
#End Region
' Private constructor allowing this type to construct the CommandeONOFF.
Public Sub New()
Appearance = Appearance.Button
End Sub
' A method called when serializing a CommandeONOFF.
<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags:=SecurityPermissionFlag.SerializationFormatter)> _
Public Sub GetObjectData(ByVal info As System.Runtime.Serialization.SerializationInfo, ByVal context As System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable.GetObjectData
' Instead of serializing this object, we will serialize a CommandeONOFFSerializationHelper instead.
info.SetType(GetType(CommandeONOFFSerializationHelper))
End Sub
' A method returning a reference to the CommandeONOFF.
Public Shared Function GetCommandeONOFF() As CommandeONOFF
Return theOneObject
End Function
End Class
<Serializable()> Friend NotInheritable Class CommandeONOFFSerializationHelper
Implements IObjectReference
' This object has no fields (although it could).
' GetRealObject is called after this object is deserialized.
Public Function GetRealObject(ByVal context As StreamingContext) As Object Implements IObjectReference.GetRealObject
' When deserializing this object, return a reference to the Singleton object instead.
Return CommandeONOFF.GetCommandeONOFF()
End Function
End Class
Donc mes objets se sérializent bien quand je lance ma méthode de sérialization sur ma collection d'objets, et ils se désérializent bien mais ils ne conservent pas leur propriétés, donc la sérialization ne me sert à rien ...
Par exemple, je peux déplacer mes objets avec la souris, quand je les sérialize j'aimerai pouvoir conserver la propriété .location de l'objet, comme ça une fois désérializé il retrouve sa position dans mon panel.
Mais une fois dézérializé, mon objet a perdu toutes ses propriétés (position, couleur, taille ...), c'est un checkbox pas défaut !
J'ai trouvé une solution mais elle ne me plait pas, je voudrais que ça soit plus dynamique et moins static, pour la solution dès que je rajoute un objet dans mon panel, je l'ajoute à une collection colObjet, j'ajoute sa dernière abscisse connue dans une collection colX et sa dernière ordonnée connue dans une collection colY, puis je crée une "listCol as list(of collection)".
Je sérialize cette liste et je traite chaque objet déserializé en lui affectant sa dernière abscisse et sa dernière ordonnée en parcourant les collections, mais c'est pas génial. Si je dois faire ça avec toutes les propriétés que je veux garder je ne suis pas sorti de l'auberge.
Je voudrais pouvoir sérialiser tous les objets (il n'y aura pas que des commandeONOFF héritant de checkbox mais pas mal d'autres objets héritant de diverses controls de vb.net) contenus dans mon panel en utilisant la collection "panel.controls".
Si quelqu'un à compris et peut me répondre je l'en remercie, sinon je peux donner plus de détails.