IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VC++ .NET Discussion :

[Débutant] Méthodes de sérialisation


Sujet :

VC++ .NET

  1. #21
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    dans le form Load ou à la création, tu modifies la propriété Size

  2. #22
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 65
    Par défaut
    Bon j'ai voulu tester ça, afin d'observer les modifications:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Activation des effets visuels de Windows XP avant la création de tout contrôle
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    	// Créer la fenêtre principale et l'exécuter
    	Form1 ^form1 = gcnew Form1();
    	form1->Size.Width = 600;
    	form1->Size.Height = 600;
    	Application::Run(form1);
    j'ai testé également dans le load de la form en remplaçant bien entendu form1 par this.

    ça m'affiche toujours une fenêtre de 300 * 300, pourquoi?

  3. #23
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    dans le form load, fais ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    this->Width = 600;
    this->Height = 600;

  4. #24
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    ou sinon, pour utiliser la propriété Size, qui est la meme, il faut faire ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Activation des effets visuels de Windows XP avant la création de tout contrôle
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    	// Créer la fenêtre principale et l'exécuter
    	Form1 ^form1 = gcnew Form1();
    	form1->Size = Drawing::Size(600,600);
    	Application::Run(form1);

  5. #25
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 65
    Par défaut
    ok merci,

    Voici mon code pour désérialiser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    if (System::IO::File::Exists("fichier.xml"))
    	{
    		try
    		{
    			System::IO::StreamReader ^ sr = gcnew System::IO::StreamReader("fichier.xml");
    			System::Xml::Serialization::XmlSerializer ^ xs;
    			xs = gcnew System::Xml::Serialization::XmlSerializer(FenP::typeid);
    			//pTheApp->objSerialize =	static_cast<ObjSerialize ^>(xs->Deserialize(sr));
    			FenP ^fen;
    			fen = static_cast<FenP ^> (xs->Deserialize(sr));
    			sr->Close();
    			chaine = fen->x.ToString();
    		}
    		catch (Exception ^ e)
    		{
    			System::String ^ message = e->InnerException->Message->ToString();
    			chaine = message;
    		}
    	}
    J'ai testé, ça me crée bien fen. Je voudrais savoir s'il n'y a pas d'erreurs , si vous pouviez jeter un coup d'oeil.

    Merci

  6. #26
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    le mieux c'est de tester
    tu mets un point d'arret sur la ligne, et une fois passée, tu regardes les valeurs dans le debbuggerr

  7. #27
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 65
    Par défaut
    J'aimerais récupérer la position sur l'écran de la fenêtre;

    Que je change les propriétés form1->location.x et form1->location.y ça ne change rien, sinon g essayé un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    form1->AutoScaleDimensions = System::Drawing::SizeF(f1->scaleDimensionHeight, f1->scaleDimensionWidth);
    Aucun changement, sinon j'ai observé la proprité startposition sur le form1.h design, elle est initialisée a "screenCenter" ms comment je peux changer ça pour lui affecter des valeurs, il a "manual" mais je sais pas comment m'en servir?

  8. #28
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    pour commencer là où tu veux, dans le form_load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this->StartPosition = FormStartPosition::Manual;
    this->Location = System::Drawing::Point(0,0);

  9. #29
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 65
    Par défaut
    J'ai essayé de faire ça mais ça ne crée pas le fichier.xml, ça ne sérialise pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    int main(array<System::String ^> ^args)
    {
    	// Activation des effets visuels de Windows XP avant la création de tout contrôle
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    	Form1 ^ fenP = gcnew Form1();
    	// Créer la fenêtre principale et l'exécuter
    	Application::Run(fenP);
    	// quand la form ferme
    	if (fenP->etat ==1){
    		cli::array<note^ ,1>^ tabTmp = gcnew cli::array<note ^>(50);
    		int i =0;
    		// tabNote = tableau de note
    		for (int i=0;i<fenP->nbNote;i++){
    			//si la fenetre existe lors de la fermeture
    			if (fenP->tabNote[i]->etat==0){
    				// inscription dans une table
    				tabTmp[i]=fenP->tabNote[i];
    				i++;
    			}
    		}
    		fenP->nbNote=i;
    		cli::array<noteSauvegarde^,1>^tabNoteSauvegarde = gcnew cli::array<noteSauvegarde ^>(fenP->nbNote);
    		for (i = 0;i<fenP->nbNote;i++){
    			//sauvegarde les valeurs nécessaires
    			tabNoteSauvegarde[i]->width = fenP->tabNote[i]->Width;
    			tabNoteSauvegarde[i]->height = fenP->tabNote[i]->Height;
    			tabNoteSauvegarde[i]->titre = fenP->tabNote[i]->Name;
    		}
    		// sérialisation
    		System::Xml::Serialization::XmlSerializer ^ sr;
    		sr = gcnew System::Xml::Serialization::XmlSerializer(noteSauvegarde::typeid);
    		System::IO::StreamWriter ^ writer = gcnew System::IO::StreamWriter("fichier.xml");
    		for (i = 0;i<fenP->nbNote;i++){
    			try
    			{
    				sr->Serialize(writer, tabNoteSauvegarde[i]);
    			}
    			catch (Exception ^ e)
    			{
    				System::String ^message = e->InnerException->Message->ToString();
    			}
    		}
    	}
    	return 0;
    }
    Pourriez-vous me dire la raison.

  10. #30
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    qu'est-ce que tabNoteSauvegarde[i] ? et pourquoi ne pas faire la sérialisation en une seule fois ?

  11. #31
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 65
    Par défaut
    tabNoteSauvegarde[i] est un élément de type noteSauvegarde, noteSauvegarde est une classe dont les attributs sont height (int16), width (int16) et titre (String).

    La classe noteSauvegarde est sérialisable.

  12. #32
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    de quel type est tabNoteSauvegarde ? array ? collection ?

  13. #33
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 65
    Par défaut
    J'ai déclaré ainsi tabNoteSauvegarde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cli::array<noteSauvegarde^,1>^tabNoteSauvegarde = gcnew cli::array<noteSauvegarde ^>(this->nbNote);
    Mais voila le problème que j'ai c'est mon tabNote (tableau de note), c'est un attribut de Form1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public : cli::array<note^ ,1>^ tabNote;
    et dans le constructeur déclaré ainsi,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabNote= gcnew cli::array<note ^,1> (50);
    Mais en fait, c'est pas dynamique, ça ne tient pas en compte des changement sur les notes. Faut utiliser des pointeurs mais comment je déclare mon tableau alors?

    Merci encore pour vos réponses.

  14. #34
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    je ne comprends pas ce que tu veux faire et où est le problème

    tu veux un tableau de tableau de notes ?

  15. #35
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 65
    Par défaut
    Pour l'instant l'attribut tabNote de Form est déclaré ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public : cli::array<note^ ,1>^ tabNote;
    Dans le constructeur il est initialisé ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabNote= gcnew cli::array<note ^>(50);
    Ce tableau contient bien des notes mais ce que je veux faire c'est un tableau de pointeurs de notes pour que s'il y a des changements sur les notes du tableau elle soient enregistrées, visibles dans celui-ci. Par exemple j'ai un attribut "etat" dans note qui celui-ci vaut 1 lors de la fermeture (0 par défaut) de la note en question. J'aimerais que le changement s'opère dans l'élément correspondant dans le tableau d'ou l'envie de créer un tableau de pointeurs d éléments notes,
    pour l'instant je n'ai qu'un tableau d'élément notes.

  16. #36
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    pas de pointeurs en C++/CLI, que des handle (http://dotnet.developpez.com/faq/cpp...syntaxe#handle) ou des références (http://dotnet.developpez.com/faq/cpp...ckingreference)

  17. #37
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 65
    Par défaut
    Voici une classe que je veux sérialiser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [System::Xml::Serialization::XmlInclude(prefSave::typeid)]
    public ref class prefSave
    {
    public:
    	System::String ^ titre2;
    	System::Drawing::Color ^ coul2;
    	System::Boolean ^ dessus;
    	System::Drawing::Font ^ police;
    	prefSave(void);
    };
    Voici la fonction qui veut la sérialiser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    private: System::Void label2_Click(System::Object^  sender, System::EventArgs^  e) {
    		prefSave ^ pSave = gcnew prefSave();
    		pSave->coul2 = this->_op->_coul2;
    		pSave->dessus = this->_op->_dessus;
    		pSave->police = this->_op->_police;
    		pSave->titre2 = this->_op->_titre2;
    		System::String ^ chaine;
    		System::Xml::Serialization::XmlSerializer ^ sr;
    		try{
    			sr = gcnew System::Xml::Serialization::XmlSerializer(prefSave::typeid);
    		}
    		catch (Exception ^ e)
    		{
    			System::String ^ message = 	e->InnerException->Message->ToString();
    			chaine = message;
    		}
    		chaine += " ecriture ";
    		System::IO::StreamWriter ^ writer = gcnew System::IO::StreamWriter("fichier.xml");
    		try
    		{
    			sr->Serialize(writer, pSave);
    		}
    		catch (Exception ^ e)
    		{
    			System::String ^ message = 	e->InnerException->Message->ToString();
    			chaine = " erreur :  "  +message;
    		}
    		this->label2->Text=chaine;
    	}
    chaine = "erreur : la référence d'objet n'est pas définie à une instace d'objet "

    J'avais rencontré cette erreur quand je voulais sérialiser une form entière mais la c'est une classe "simple" que je veux sérialiser.

    Qu'est ce qui ne va pas?

    NB: les includes sont bons.

  18. #38
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 65
    Par défaut
    En fait, aprés mes recherches, j'ai constaté que coul2 et police ne sont pas sérialisable, en tout cas ces deux valeurs faisaient planter la sérialisation.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. débutant XMLEncoder soucis sérialisation classes
    Par superpigeon dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 26/10/2006, 15h24
  2. [EJB] [débutant] [Méthode]EJB et présentation web
    Par Eric Berger dans le forum Java EE
    Réponses: 6
    Dernier message: 04/08/2006, 00h42
  3. [algoritmique][débutant]Méthode récursive
    Par lejimi dans le forum Langage
    Réponses: 7
    Dernier message: 16/01/2006, 20h54
  4. Réponses: 2
    Dernier message: 05/01/2006, 15h17
  5. [Débutant] Méthode super()
    Par KooX dans le forum Langage
    Réponses: 3
    Dernier message: 07/11/2004, 22h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo