CLONER UN OBJET TRÈS SIMPLEMENT

cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 - 2 mars 2005 à 00:47
chris37000 Messages postés 42 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 décembre 2017 - 4 juil. 2013 à 13:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29859-cloner-un-objet-tres-simplement

chris37000 Messages postés 42 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 décembre 2017
4 juil. 2013 à 13:56
Bonjour ce post commence a daté mais j'ai un souci avec cette copie d'objet. Mon souci poste sur la copie d'objet graphique.
Dans le cadre d'une évolution d'un code VB6 vers VB.net
Sur ma form j'ai 120 fois un groupBox contenant plusieurs picturebox (6) et plusieurs textbox (4).

Au lieu de les dessiner un par un comme on faisait dans VB6 à l'aide des index formant des tableau. J'aimerais en dessiner un puis le recopier 120 fois en les affectant dans des tableau de Picturebox et textbox et groupebox ainsi je garde tout mon code d'algo de VB6 pour aller modifier les objets.

Est-ce possible avec la sérialisation.
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
24 avril 2011 à 23:12
Bonjour,
je vous joint juste ce lien pour vous montrer, que même si elle fonctionne, il y a des pb de velocité dans cette méthode
http://www.vbfrance.com/forum/sujet-SERIALISATION-CLONAGE_1515175.aspx
Bonne prog CGSI3
GW74372 Messages postés 6 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 31 mars 2010
27 juil. 2009 à 16:53
Bonjour,
Je voudrais répondre à LATE sur sa classe qui ne se clone pas.
En fait, commele précisait NICOLASLIGHT la classe doit être <sérialiable>_ mais aussi les objets qui la compose. Et malheureusement Collection ne l'est pas!!
Pour que cela marche il faudrait que tu fasse une collection typé qui herite de ISerializable
Voila!
NicolasLight Messages postés 5 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 18 novembre 2005
13 nov. 2005 à 10:45
Salut LATE, dans ton cas, le plus simple est d'implémenter la fonction Clone de l'interface ICloneable comme le décrit ofeelfree. De toute manière, avec du recul, je me suis rendu compte que ma méthode n'était pas très rapide à l'exécution mais a l'avantage de pouvoir cloner n'importe quoi facilement sans devoir écrire cette fonction clone.
Cependant, ça m'étonne que ça ne marche pas sur ta classe. N'oublies pas de mettre <serializable>_ devant la déclaration de la classe.
cs_LATE Messages postés 2 Date d'inscription lundi 6 janvier 2003 Statut Membre Dernière intervention 7 novembre 2005
7 nov. 2005 à 17:14
Sympa.... mais pas de récursivité...
si quelqu'un trouve avant moi ..
en clair si ma classe :

# Class personne
# public nom as string
# public prenom as string
public colVoiture as collection
#
# public sub New(byval nom as string, byval prenom as string)
# Me.nom = nom
# Me.prenom = prenom
Me.colVoiture = new collection
Me.colVoiture.add (1, "Fiat")
Me.colVoiture.add (2, "Renault")
# End sub
# End Class
#

dans ce cas... ca marche pas..
merci pour celui qui trouve avant moi ..;
cs_Pitchou13 Messages postés 12 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 8 mars 2005
8 mars 2005 à 10:55
Je crois que sur VBA il y avait une fonction pour ca ! et Avec les réferences, je clonait un objet en une ligne sous VB6... Je vais essayer de la retrouver ...
@+
NicolasLight Messages postés 5 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 18 novembre 2005
5 mars 2005 à 20:53
Je suis désolé, je n'ai pas beaucoup travaillé en VB6, j'ai surtout travaillé en JAVA et en VB.NET.
Mais si je trouve une réponse à ta question, je la posterai ici ;-)
JoePatent Messages postés 171 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 20 juillet 2008
4 mars 2005 à 20:22
Existe-t-il la meme astuce pour les classes en VB6 ?
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
2 mars 2005 à 22:18
merci pour tes explications claires 8/10
NicolasLight Messages postés 5 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 18 novembre 2005
2 mars 2005 à 17:04
Avant tout, merci de vos commentaires.

Pour répondre à Chris81,

Sérialisez signifie en gros :
transformer un objet en données que l'on pourra écrire sur un flux. On utilise alors un formateur (ex : le binaryFormatter) pour transformer cet objet en binaire par exemple, donc en un tableau de bytes, ou en xml avec le xmlSerializer.
Cette manipulation permet ainsi d'écrire un objet sur n'importe quel flux (Stream).

La désérialisation est le procédé inverse de la sérialisation : on retransforme les données d'un flux (Stream) en un objet du type de départ (dans mon exemple, on retransforme en un objet Personne).

J'espère avoir répondu à ta réponse.
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
2 mars 2005 à 11:41
C'est une astuce intérressante. Cependant ya des techniques un plus objets :)

http://www.codeproject.com/csharp/cloneimpl_class.asp
ofeelfree Messages postés 9 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 14 juin 2005
2 mars 2005 à 10:35
Bonjour,

On pourrait aussi imaginer :

Public Class Personne

Implements ICloneable

Public mNom As String
Public mPrenom As String

Public Sub New(Nom As String, Prenom As String)
mNom = Nom
mPrenom = Prenom
End Sub

Public Function Clone() As Personne Implements ICloneable.Clone
Return New Personne(mNom, mPrenom)
End Function

End Class

Ainsi on peut se passer de la sérialisation et implémenter l'interface par défaut qui va bien...
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
2 mars 2005 à 00:47
slt,
que veux dire serialise et deserialise?
merci