bonjour tatchi
Et à quoi sert l'infrastructure Binding des controls winforms et du Net Framework?
Tu vas faire du "reinvent the wheel" ....
Bref pour les labels (ou control souhaite) tu peux lier ses props :Text, BackColor ,ForeColor etc....a chaque changement d'etat d'une prop de ton class Maison ou de l'un de ses elements(Class Portail,Salon ,PorteGarage etc....)
Pour cela tu dois peaufiner tes class comme il faut :
1/ MembreMaison
-class Ancetre des elements du class Maison...
-implemente INotifyPropertyChanged pour besoin du binding (aller -retour)...
-prop:EstAllume =>etat actuel du membre: arme ou desarme
-prop:EtatCouleur =>couleur qui suit l'etat actuel du membre
-2 props:NormalCouleur, AlarmeCouleur=>permettent de customiser eventuellement les couleurs Normalmembre, AlarmeCouleur
-prop IDType:type enum permet d'identifier le type du membre
2/ les rejetons de MembreMaison (excuse du terme) :
- Salon,Portail,fenetreA & fenetreB.... avec zero code....
3/Class Maison:
- props:Salon, Portail Portail,FenetreA, FenetreB quI se contente de les iniatiliser...
Maintenant si les voleurs sont des gangsters de haute voltige qui veulent "demenager" la maison... il faudra un class Bazooka".....
Bref il suffit ensuite dans ton form:
- init. une instance de Maison....
- dans Load_Form :faire Label.DataBindings.Add(new binding()) pour les props des labels à lier aux prop homologues de Maison.Membre et tu as la liaison
two-way...
code .cs du class Maison(projet dll projet librairie LibMaison) à compiler et à referencer dans le fichier app de ton form (le code est donne à 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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Windows.Forms;
using LibMaison;
using System.Drawing;
namespace LibMaison
{
public enum ElementType
{
Salon,
Portail,
FenetreA,
FenetreB
}
//Ancetre des Membres de Maison
public class MembreMaison : INotifyPropertyChanged
{
private ElementType idType;
public ElementType IDType
{
get { return idType; }
set
{
idType = value;
OnPropertyChanged("IDType");
}
}
// permet de customiser la couleur normal
private Color normalcouleur = Color.LimeGreen;
public Color NormalCouleur
{
get { return normalcouleur; }
set
{
normalcouleur = value;
OnPropertyChanged("NormalCouleur");
}
}
// permet de customiser couleur d'alarme
private Color alarmcouleur = Color.Red;
public Color AlarmeCouleur
{
get { return alarmcouleur; }
set
{
alarmcouleur = value;
OnPropertyChanged("AlarmeCouleur");
}
}
// couleur qui suit l'etat actuel du membre
private Color etatCouleur;
public Color EtatCouleur
{
get { return etatCouleur; }
set
{
etatCouleur = value;
OnPropertyChanged("EtatCouleur");
}
}
// etat actuel du membre: arme ou desarme
private bool estAllume;
public bool EstAllume
{
get { return estAllume; }
set
{
estAllume = value;
if (estAllume)
{
EtatCouleur = AlarmeCouleur;
}
else
{
EtatCouleur = NormalCouleur;
}
OnPropertyChanged("EstAllume");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected internal void OnPropertyChanged(string nameProp)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler !=null )
PropertyChanged(this, new PropertyChangedEventArgs(nameProp));
}
}
public class Salon:MembreMaison
{
public Salon(ElementType pidType)
{
IDType = pidType;
EstAllume = false;
}
}
public class Portail : MembreMaison
{
public Portail(ElementType pID)
{
IDType = pID;
EstAllume = false;
}
}
public class FenetreA : MembreMaison
{
public FenetreA(ElementType pID)
{
IDType = pID;
EstAllume = false;
}
}
public class FenetreB : MembreMaison
{
public FenetreB(ElementType pID)
{
IDType = pID;
EstAllume = false;
}
}
public class Maison
{
public Maison()
{
Salon = new Salon(ElementType.Salon);
Portail = new Portail(ElementType.Portail );
FenetreA = new FenetreA(ElementType.FenetreA);
FenetreB = new FenetreB(ElementType.FenetreB);
}
public Salon Salon { get; set; }
public Portail Portail { get; set; }
public FenetreA FenetreA { get; set; }
public FenetreB FenetreB { get; set; }
}
} |
code du winform (proj app WinFormNotify) utilisateur:
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//ajout reference
using LibMaison;
namespace WinFormNotify
{
public partial class Form2 : Form
{
public Maison sweetHome = new Maison();
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
sweetHome = new Maison();
// 1-Portail
// Alarm color Portail =>Coral
sweetHome.Portail.AlarmeCouleur = Color.Coral;
this.lblPortail.ForeColor = Color.White;
this.lblPortail.DataBindings.Add(new Binding("BackColor",sweetHome.Portail,"ColorState",true,DataSourceUpdateMode.OnPropertyChanged));
this.lblPortail.DataBindings.Add(new Binding("Text", sweetHome.Portail, "IDType", true, DataSourceUpdateMode.OnPropertyChanged));
// 2-Salon
// Alarm color Salon =>LightBlue
sweetHome.Salon.AlarmeCouleur = Color.DarkBlue;
this.lblSalon.ForeColor = Color.White;
this.lblSalon.DataBindings.Add(new Binding("BackColor", sweetHome.Salon , "ColorState", true, DataSourceUpdateMode.OnPropertyChanged));
this.lblSalon.DataBindings.Add(new Binding("Text", sweetHome.Salon, "IDType", true, DataSourceUpdateMode.OnPropertyChanged));
// 3-FenA
this.lblFenA.ForeColor = Color.White;
this.lblFenA.DataBindings.Add(new Binding("BackColor", sweetHome.FenetreA, "ColorState", true, DataSourceUpdateMode.OnPropertyChanged));
this.lblFenA.DataBindings.Add(new Binding("Text", sweetHome.FenetreA, "IDType", true, DataSourceUpdateMode.OnPropertyChanged));
// 4-FenA
this.lblFenB.ForeColor = Color.White;
this.lblFenB.DataBindings.Add(new Binding("BackColor", sweetHome.FenetreB, "ColorState", true, DataSourceUpdateMode.OnPropertyChanged));
this.lblFenB.DataBindings.Add(new Binding("Text", sweetHome.FenetreB, "IDType", true, DataSourceUpdateMode.OnPropertyChanged));
}
private void btnPortailAlarm_Click(object sender, EventArgs e)
{
if (sweetHome != null)
{
sweetHome.Portail.EstAllume = !sweetHome.Portail.EstAllume;
//desarme Salon
sweetHome.Salon.EstAllume = ! sweetHome.Salon.EstAllume;
}
}
private void btnSalonAlarm_Click(object sender, EventArgs e)
{
if (sweetHome != null)
{
sweetHome.Salon.EstAllume = ! sweetHome.Salon.EstAllume;
sweetHome.Portail.EstAllume = ! sweetHome.Portail.EstAllume ;
}
}
private void btnAlarmFenetres_Click(object sender, EventArgs e)
{
if (sweetHome != null)
{
sweetHome.FenetreA.EstAllume = !sweetHome.FenetreA.EstAllume;
sweetHome.FenetreB.EstAllume = !sweetHome.FenetreB.EstAllume;
}
}
}
} |
bon code...
Partager