dans le form Load ou à la création, tu modifies la propriété Size
Version imprimable
dans le form Load ou à la création, tu modifies la propriété Size
Bon j'ai voulu tester ça, afin d'observer les modifications:
j'ai testé également dans le load de la form en remplaçant bien entendu form1 par this.Code:
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);
ça m'affiche toujours une fenêtre de 300 * 300, pourquoi?
dans le form load, fais ca
Code:
1
2
3 this->Width = 600; this->Height = 600;
ou sinon, pour utiliser la propriété Size, qui est la meme, il faut faire ainsi :
Code:
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);
ok merci,
Voici mon code pour désérialiser :
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.Code:
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; } }
Merci
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
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
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?Code:
1
2 form1->AutoScaleDimensions = System::Drawing::SizeF(f1->scaleDimensionHeight, f1->scaleDimensionWidth);
pour commencer là où tu veux, dans le form_load :
Code:
1
2 this->StartPosition = FormStartPosition::Manual; this->Location = System::Drawing::Point(0,0);
J'ai essayé de faire ça mais ça ne crée pas le fichier.xml, ça ne sérialise pas :
Pourriez-vous me dire la raison. ;)Code:
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; }
qu'est-ce que tabNoteSauvegarde[i] ? et pourquoi ne pas faire la sérialisation en une seule fois ?
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.
de quel type est tabNoteSauvegarde ? array ? collection ?
J'ai déclaré ainsi tabNoteSauvegarde
Mais voila le problème que j'ai c'est mon tabNote (tableau de note), c'est un attribut de Form1.Code:cli::array<noteSauvegarde^,1>^tabNoteSauvegarde = gcnew cli::array<noteSauvegarde ^>(this->nbNote);
et dans le constructeur déclaré ainsi,Code:public : cli::array<note^ ,1>^ tabNote;
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?Code:tabNote= gcnew cli::array<note ^,1> (50);
Merci encore pour vos réponses.
je ne comprends pas ce que tu veux faire et où est le problème
tu veux un tableau de tableau de notes ?
Pour l'instant l'attribut tabNote de Form est déclaré ainsi
Dans le constructeur il est initialisé ainsi:Code:public : cli::array<note^ ,1>^ tabNote;
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,Code:tabNote= gcnew cli::array<note ^>(50);
pour l'instant je n'ai qu'un tableau d'élément notes.
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)
Voici une classe que je veux sérialiser :
Voici la fonction qui veut la sérialiser :Code:
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); };
chaine = "erreur : la référence d'objet n'est pas définie à une instace d'objet "Code:
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; }
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.
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. ;)