Bonsoir,
Je cherche en vain a savoir comment sérialiser la position de mes boutons créer dynamiquement, mais aucune réponse ^^
Pourriez-vous m'éclairer sur la sérialisation de la position de mes boutons créer dynamiquement ?
Merci d'avance![]()
Bonsoir,
Je cherche en vain a savoir comment sérialiser la position de mes boutons créer dynamiquement, mais aucune réponse ^^
Pourriez-vous m'éclairer sur la sérialisation de la position de mes boutons créer dynamiquement ?
Merci d'avance![]()
Bonjour,
Ca dépend un peu de la finalité de ce que tu veux faire. Si tu veux simplement conserver la position de tes boutons sur une form, tu crées une classe PositionBoutons avec 2 propriétés (Left, Top) et tu sérialises une List(of PositionBoutons)
Maintenant si la finalité est plus complexe genre serializer toutes les propriétés du bouton (text, position, taille, events appelés) ou un bouton peut-être placé sur un container de type panel ou encore serializer autre chose qu'un bouton, la problématique sera un peu différente.
Merci pour m'avoir réponduMais pouvez-me donner un exemple de code pour la sérialisation ?
![]()
Le net regorge d'exemples. J'en ai fait un petit mais je viens de voir qu'on était sur le forum VB. Mon exemple est en C# mais ne pose pas de difficulté de conversion (au pire, il y a des outils). Exemple de serialisation d'une classe myClass ayant des propriétés de type simple :
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 private void button1_Click(object sender, EventArgs e) { List<myClass> l = new List<myClass>(); myClass c; c = new myClass(); c.Width = 10; c.Height = 20; l.Add(c); c = new myClass(); c.Width = 220; c.Height = 210; l.Add(c); serialize(l); } private void button2_Click(object sender, EventArgs e) { List<myClass> l = deserialize(); } // deSerialisation d'une List(of myClass) private List<myClass> deserialize() { XmlSerializer x = new XmlSerializer(typeof(List<myClass>)); using (StreamReader reader = new StreamReader(@"d:\temp\serial.xml")) { return (List<myClass>)x.Deserialize(reader); } } // Serialisation d'une List(of myClass) private void serialize(List<myClass> list) { XmlSerializer x = new XmlSerializer(typeof(List<myClass>)); using (TextWriter writer = new StreamWriter(@"d:\temp\serial.xml")) { x.Serialize(writer, list); } }
J'ai converti le code asser facilement, mais par contre j'ai test que la serialisation, mais cela ne marche pas
Code de ma classe :
Code principal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Public Class Boutonn Property X As Integer Property Y As Integer End Class
Les boutons ne se remettent pas en place, une fois la fenêtre fermer et puis réouverte ^^
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
48
49
50
51
52
53
54
55
56
57
58
59 Imports System.Xml.Serialization Imports System.IO Public Class Options_controls Public Num As Integer Public WithEvents btn As Button Public LocalMousePosition As Point Public Nu As Integer Private Sub serialize(list As List(Of Boutonn)) Dim x As New XmlSerializer(GetType(List(Of Boutonn))) Using writer As TextWriter = New StreamWriter("c:\serial.xml") x.Serialize(writer, list) End Using End Sub Private Sub Options_controls_MouseClick(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseClick If e.Button = MouseButtons.Left And Form1.btn = 1 Then btn = New Button Num += 1 Nu = 1 btn.Text = "Button" + Num.ToString btn.Name = "Button" + Num.ToString LocalMousePosition = Me.PointToClient(Cursor.Position) btn.Location = New Drawing.Point(LocalMousePosition.X, LocalMousePosition.Y) Me.Controls.Add(btn) AddHandler Me.Controls(btn.Name).MouseDown, AddressOf btn_MouseDown End If End Sub Private Sub btn_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) If e.Button = MouseButtons.Right And Form1.btn = 1 Then btn = CType(sender, Button) Timer1.Start() Else Timer1.Stop() End If End Sub Private Sub Timer1_Tick_1(sender As Object, e As EventArgs) Handles Timer1.Tick LocalMousePosition = PointToClient(Cursor.Position) btn.Location = New Drawing.Point(LocalMousePosition.X, LocalMousePosition.Y) End Sub Private Sub Options_controls_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter) Then If MsgBox("Voulez vous enregistrer?", MsgBoxStyle.YesNo, "Enregistrement") = MsgBoxResult.Yes Then Timer1.Stop() Dim l As New List(Of Boutonn) Dim c As Boutonn c = New Boutonn c.X = btn.Location.X c.Y = btn.Location.Y l.Add(c) serialize(l) Me.Close() Else Timer1.Stop() Me.Close() End If End If End Sub End Class
C'est normal, regarde ton code : Tu ne déserialises pas ton fichier au démarrage (load) de la form.
L'idée serait :
Lorsque tu fermes ta form, tu sérialises les coordonnées de tes boutons tel que tu le fais actuellement.
Lorsque tu Load ta form, tu déserialises le fichier => cela créera une liste de Buttonn (liste d'objets ne contenant que les coordonnées de tes futurs boutons). Tu parcours cette liste, instancies les boutons et les places sur la form.
Partager