/// <summary> /// Constructeur /// </summary> /// <param name="aPictureBox">Dessin de la voiture</param> public Voiture(PictureBox aPictureBox, FeuTricolore aFeuTricolore) { // Ici on créé une dépendance entre le feu tricolore et la voiture pbxVoiture = aPictureBox; initialPoint = pbxVoiture.Location; feuTricolore = aFeuTricolore; }
/// <summary> /// Au chargement du formulaire /// </summary> private void Form1_Load(object sender, EventArgs e) { // Affiche le feu tricolore feuTricolore = new FeuTricolore(pbxFeuTricolore.CreateGraphics()); // Créé la voiture voiture = new Voiture(pbxVoiture, feuTricolore); }
/// <summary> /// Au chargement du formulaire /// </summary> private void frmMain_Load(object sender, EventArgs e) { // Pour que la voiture soit transparente pbxVoiture.Parent = pbxCircuit; pbxVoiture.Location = new Point(pbxVoiture.Location.X - pbxVoiture.Parent.Location.X, pbxVoiture.Location.Y - pbxVoiture.Parent.Location.Y); pbxVoiture.BackColor = Color.Transparent; // Affiche le feu tricolore feuTricolore = new FeuTricolore(pbxFeuTricolore.CreateGraphics()); // Créé la voiture voiture = new Voiture(pbxVoiture); // TODO 4 : Résumé : // Bravo vous venez à l'étape 2 de créer votre propre événement // Maintenant il vous faut l'utiliser (abonner) // TODO 4a : S'abonner à l'évenement changement de couleur du feu // TODO 4b : Lorsque l'événement se déclenche il faut réaliser les actions suivantes : // Si la nouvelle couleur est verte, démarrer la voiture // sinon l'arreter. // TODO 5 : Bravo vous avez terminé l'exercice. En bonus, vous pouvez regarder la solution "DemoSansEventPolling" // qui montre une implémentation avec une technique appelée le "polling". Ce type d'implémentation a // l'inconvénient de boucler sans arret en demandant à intervalle régulier l'état du feu tricolore. // Cela surcharge le feu tricolore d'appels qui dans certains scenarios peuvent être problématique. // De plus cela créé un couplage entre la voiture et le feu tricolore, ce qui rend les classes dépedantes }
/// <summary> /// Implémentation de l'événement pour s'abonner au changement de couleur du feu /// Quand le feu est vert, la voiture démarre. /// Pour toutes les autres couleurs, la voiture s'arrete. /// </summary> /// <param name="sender">Le feu tricolore qui déclenche l'événement</param> /// <param name="newColor">La nouvelle couleur du feu</param> /// <param name="oldColor">La couleur précédente du feu</param> private void FeuTricolore_ColorChanged(FeuTricolore sender, FeuTricolore.FeuTricoloreEnum newColor, FeuTricolore.FeuTricoloreEnum oldColor) { if (newColor == FeuTricolore.FeuTricoloreEnum.Vert) { voiture.Start(); } else { voiture.Stop(); } }
/// <summary> /// Au chargement du formulaire /// </summary> private void frmMain_Load(object sender, EventArgs e) { // Pour que la voiture soit transparente pbxVoiture.Parent = pbxCircuit; pbxVoiture.Location = new Point(pbxVoiture.Location.X - pbxVoiture.Parent.Location.X, pbxVoiture.Location.Y - pbxVoiture.Parent.Location.Y); pbxVoiture.BackColor = Color.Transparent; // Affiche le feu tricolore feuTricolore = new FeuTricolore(pbxFeuTricolore.CreateGraphics()); // Créé la voiture voiture = new Voiture(pbxVoiture); // S'abonne à l'évenement changement de couleur du feu feuTricolore.ColorChanged += FeuTricolore_ColorChanged; }