je me suis rendu compte que si j'ai 30mdichild ou plus , ça devient un peu compliquéc'est 30 form différents ou 30 instances du même form?
using System; using System.Diagnostics; using System.Timers; using System.Windows.Forms; namespace test { public static class SurveillanceInactivite { public delegate void TempsInactiviteAtteintEvent(TimeSpan DureePassee); /// <summary> /// Signale que la durée d'inactivité a été atteinte /// </summary> public static event TempsInactiviteAtteintEvent TempsInactiviteAtteint; /// <summary> /// Lance la surveillance /// </summary> /// <param name="Duree">Durée après laquelle on signalera l'inactivité</param> /// <param name="Sender">Formulaire qui demande la surveillance, et qui sera surveillé aussi</param> public static void DemarrerSurveillance(TimeSpan Duree, Form Sender) { AjouteASurveiller(Sender); duree = Duree; timer.Elapsed += timer_Elapsed; timer.Interval = 1000; timer.Start(); chrono.Start(); } /// <summary> /// Methode associée au timer qui vérifie régulièrement si on a atteint le temps d'inactivité /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static void timer_Elapsed(object sender, ElapsedEventArgs e) { if (chrono.Elapsed >= duree) { TimeSpan dureePassee = chrono.Elapsed; chrono.Restart(); if (SurveillanceInactivite.TempsInactiviteAtteint != null) SurveillanceInactivite.TempsInactiviteAtteint(dureePassee);//Déclenche l'évement pour signaler l'inactivité } } /// <summary> /// Methode qui remets le chronomètre à zéro /// </summary> public static void YaDeLaVie() { chrono.Restart(); } /// <summary> /// S'abonne aux évènements du formulaire et ensuite l'affiche /// </summary> /// <param name="Formulaire"></param> public static void AjouteForumulaireASurveillerEtLaffiche(Form Formulaire) { AjouteASurveiller(Formulaire); Formulaire.Show(); } /// <summary> /// S'abonne aux évènements du formulaire /// </summary> /// <param name="Formulaire"></param> private static void AjouteASurveiller(Form Formulaire) { Formulaire.MouseMove += Formulaire_MouseMove; Formulaire.KeyPreview = true; Formulaire.KeyPress += Formulaire_KeyPress; //to do: voir s'il est utile de s'abonner au MouseMove de chaque contrôle } private static void Formulaire_KeyPress(object sender, KeyPressEventArgs e) { YaDeLaVie(); } private static void Formulaire_MouseMove(object sender, MouseEventArgs e) { YaDeLaVie(); } private static System.Timers.Timer timer = new System.Timers.Timer(); private static Stopwatch chrono = new Stopwatch(); private static TimeSpan duree; } }
//pour le test, j'ai mis 10 secondes SurveillanceInactivite.DemarrerSurveillance(new TimeSpan(0, 0, 10), this); SurveillanceInactivite.TempsInactiviteAtteint += SurveillanceInactivite_TempsInactiviteAtteint;//on s'abonne à l'évènement qui dit que le temps est passé //Pour le test j'ai lancé 30 fois le même for (int i = 0; i < 30; i++) { Form6 frm = new Form6(); SurveillanceInactivite.AjouteForumulaireASurveillerEtLaffiche(frm); //A la place de frm.Show() }
void SurveillanceInactivite_TempsInactiviteAtteint(TimeSpan DureePassee) { MessageBox.Show(string.Format("T'as rien fait depuis {0} secondes", DureePassee.TotalSeconds)); }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Timers; using System.Windows.Forms; namespace MDIParents { public partial class Form1 : Form { public Form1() { InitializeComponent(); //pour le test, j'ai mis 10 secondes SurveillanceInactivite.DemarrerSurveillance(new TimeSpan(0, 2, 0), this); SurveillanceInactivite.TempsInactiviteAtteint += SurveillanceInactivite_TempsInactiviteAtteint;//on s'abonne à l'évènement qui dit que le temps est passé //Pour le test j'ai lancé 30 fois le même //for (int i = 0; i < 30; i++) //{ // FormFille1 frm = new FormFille1(); SurveillanceInactivite.AjouteForumulaireASurveillerEtLaffiche(Formulaire); //A la place de frm.Show() // } } public static Form Formulaire = new Form(); private void Form1_Load(object sender, EventArgs e) { } public static class SurveillanceInactivite { public delegate void TempsInactiviteAtteintEvent(TimeSpan DureePassee); /// <summary> /// Signale que la durée d'inactivité a été atteinte /// </summary> public static event TempsInactiviteAtteintEvent TempsInactiviteAtteint; /// <summary> /// Lance la surveillance /// </summary> /// <param name="Duree">Durée après laquelle on signalera l'inactivité</param> /// <param name="Sender">Formulaire qui demande la surveillance, et qui sera surveillé aussi</param> public static void DemarrerSurveillance(TimeSpan Duree, Form Sender) { AjouteASurveiller(Sender); duree = Duree; timer.Elapsed += timer_Elapsed; timer.Interval = 30000; timer.Start(); chrono.Start(); } /// <summary> /// Methode associée au timer qui vérifie régulièrement si on a atteint le temps d'inactivité /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static void timer_Elapsed(object sender, ElapsedEventArgs e) { if (chrono.Elapsed >= duree) { TimeSpan dureePassee = chrono.Elapsed; chrono.Restart(); if (SurveillanceInactivite.TempsInactiviteAtteint != null) SurveillanceInactivite.TempsInactiviteAtteint(dureePassee);//Déclenche l'évement pour signaler l'inactivité } } /// <summary> /// Methode qui remets le chronomètre à zéro /// </summary> public static void YaDeLaVie() { chrono.Restart(); } /// <summary> /// S'abonne aux évènements du formulaire et ensuite l'affiche /// </summary> /// <param name="Formulaire"></param> public static void AjouteForumulaireASurveillerEtLaffiche(Form Formulaire) { Formulaire = new Form(); AjouteASurveiller(Formulaire); Formulaire.Show(); } /// <summary> /// S'abonne aux évènements du formulaire /// </summary> /// <param name="Formulaire"></param> private static void AjouteASurveiller(Form Formulaire) { // Formulaire = new Form(); Formulaire.MouseMove += Formulaire_MouseMove; Formulaire.KeyPreview = true; Formulaire.KeyPress += Formulaire_KeyPress; //to do: voir s'il est utile de s'abonner au MouseMove de chaque contrôle } private static void Formulaire_KeyPress(object sender, KeyPressEventArgs e) { YaDeLaVie(); } private static void Formulaire_MouseMove(object sender, MouseEventArgs e) { YaDeLaVie(); } private static System.Timers.Timer timer = new System.Timers.Timer(); private static Stopwatch chrono = new Stopwatch(); private static TimeSpan duree; } void SurveillanceInactivite_TempsInactiviteAtteint(TimeSpan DureePassee) { MessageBox.Show(string.Format("T'as rien fait depuis {0} secondes", DureePassee.TotalSeconds)); } private void forme1ToolStripMenuItem_Click(object sender, EventArgs e) { FormFille1 ff1 = new FormFille1(); ff1.MdiParent = this; ff1.Show(); } private void forme2ToolStripMenuItem_Click(object sender, EventArgs e) { FormFille2 ff2 = new FormFille2(); ff2.MdiParent = this; ff2.Show(); } private void forme3ToolStripMenuItem_Click(object sender, EventArgs e) { FormFille3 ff3 = new FormFille3(); ff3.MdiParent = this; ff3.Show(); } private void Form1_MdiChildActivate(object sender, EventArgs e) { Formulaire = ActiveMdiChild; } } }
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ICI Merci d'y penser dans tes prochains messages. |
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Modifié par VANDREAM le 8/11/2016 à 12:54
c'est ça que je savoir à partir d'un formulaire principal donné gerer le handle de toutes les autres formules de l'application sans que je ne programme le stopwatch dans ces formulaire là.
8 nov. 2016 à 12:55
- si l'utilisateur fait 5mn sans faire un mouvement de la souris ni du clavier, alors un formulaire modal s'affiche en indiquant le nombre de minute d'inactivité
- si l'utilisateur fait moins de 5mn et qu'il fait un mouvement clavier ou souris, alors le système initialise le timer
mon problème c'est de savoir comment je peux donc implémenter le bon code du hook dans le mdiparent pour gérer ce genre de cas.
merci d'avance pour votre assistance