Bonjour,
J'ai créé une classe "Voiture" avec 2 propriétés "Demarree" et "Essence".
Je souhaite empêcher de démarrer la voiture s'il n'y a pas d'essence, et afficher un message d'avertissement.
Après avoir posé mon nouveau contrôle sur une fiche, je rentre 10 dans la propriété "Essence" et bascule à true la propriété "Demarree". Tout va bien.
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 public class Voiture : UserControl { /// <summary> /// Litres d'essence dans le réservoir /// </summary> public int Essence { get { return _Essence; } set { _Essence = value; } } private int _Essence = 0; /// <summary> /// True si la voiture est démarrée /// </summary> public bool Demarree { get { return _Demarree; } set { if (value && _Essence <= 0) MessageBox.Show("Mettre d'abord de l'essence."); else _Demarree = value; } } private bool _Demarree = false; }
Mais lorsque j'exécute ce programme, le message d'avertissement s'affiche.
Tout ça parce que VisualStudio enregistre les propriétés des contrôles dans l'ordre alphabètique.
Si l'on observe le code généré automatiquement dans "Form1.Designer.cs" on se rend compte que la valeur de la propriété "Demarree" est affectée avant celle de "Essence" qui vaut à ce moment là 0.
Le problème ne se poserait plus si je renommais ma propriété en "ZDemarree" par exemple, ou si je pré-initialisais "Essence" avec une valeur positive.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // // voiture1 // this.voiture1.Demarree = true; this.voiture1.Essence = 50; this.voiture1.Location = new System.Drawing.Point(37, 405); this.voiture1.Name = "voiture1"; this.voiture1.Size = new System.Drawing.Size(150, 150); this.voiture1.TabIndex = 6;
Mais sur en exemple complexe avec des références d'objets à la place d'entiers et beaucoup de propriété cela devient un vrai casse-tête.
Quelqu'un aurait-il une technique pour modifier l'ordre d'affectation des propriétés par VisualStudio ?
D'avance merci.
Partager