Bonjour,
je souhaiterais réaliser une boucle while avec un bouton qui enverra une variable tant que mon bouton serra pressé.
Merci pour vos réponse.
Bonjour,
je souhaiterais réaliser une boucle while avec un bouton qui enverra une variable tant que mon bouton serra pressé.
Merci pour vos réponse.
Qu'as tu déjà essayé ?
Quel est le problème que tu rencontres ?
Que souhaites tu faire exactement ?
Je cherche à créer un bouton qui envoie une fonction en boucle et à partir du moment ou je relâche le bouton la fonction s'arrête.
salut,
tu peux trouver ce genre de bouton sur le net ou bien le coder toi même en t'abonnant à l'évent OnMouseDown d'un bouton et l'event OnMouseUp de ce même bouton...
Et sur le MouseDown, tu peux lancer un timer qui a intervalle défini par toi-même appeler la fonction que tu veux appeler de façon récurrente.
Il suffit sur le OnMouseUp d'arrêter le timer...
Donc, en gros, 3 lignes de code et s'est plié![]()
Sauf erreur de ma part, les onMouseUp et onMouseDown sont des évènements clients.
Si ensuite tu veux appeler une fonction coté code-behind, il te faudra passer par Ajax
qui a parlé Web ?
Ma proposition est pour du winform... maintenant, si le truc, c'est pour faire du Web, il faut préciser le contexte d'utilisation![]()
Arf oui j'étais parti direct sur du web sans me poser la question.
Attendons donc de connaitre le contexte exact![]()
Mon programme s'applique sur des winforms et non du web.
Peut-tu m'en dire plus sur les OnMouseDown et OnMouseUp s'il te plait?
regardes la doc
OnMouseDown et OnMouseUp sont deux evenements levés lorsqu'un appui sur ton bouton se produit (appui ou laché du bouton).
Déjà avant que tu te lance dans une bidouille avec des timers, que veux tu faire? iqu'est ce qu'il y a dans ta boucle While (boutton.IsPressed )?
Bonjour,
Mieux vaudrait utiliser un BackgroundWorker.
Mais, on peut "bidouiller" en testant l'appui sur une touche clavier ainsi :
Comme on ne peut pas traiter le click sur un bouton avant la fin d'exécution du traitement, on peut éventuellement tester si le pointer souris est au dessus d'une PictureBox "Stop" à afficher avant le Start en testant en même temps que la variable keyPressed la position de la souris :
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 internal class StopProcClass { private static bool KeyPressed ; private Control ControlToRefresh ; internal static void StopProc_Start(Control vControlToRefresh) { ControlToRefresh=vControlToRefresh ; KeyPressed=false ; Enabled=true ; ControlToRefresh.Refresh() ; SxWFTools.DoEvents(); } internal static bool StopProc_StopRequired() { bool Result = false; try // in case of closing appli while a process using "StopProc" is in progress { if (KeyPressed) Result=MessageBox.Show("Stop process ?",StopTitle.Text,MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes ; KeyPressed=false ; } catch {} ; return Result ; } internal static void StopProc_Start(Control vControlToRefresh) { Enabled=false ; } private static Stack CursorsStack = new Stack(); internal static void PushCursor(Cursor newcursor) { CursorsStack.Push(Cursor.Current); Cursor.Current = newcursor; } internal static bool PopCursor() { bool result = CursorsStack.Count>0; if (result) Cursor.Current = (Cursor)CursorsStack.Pop(); return result; } internal static void DoEvents() { PushCursor(Cursor.Current); Application.DoEvents(); PopCursor(); } } protected override void WndProc( ref Message m ) { base.WndProc() ; if (StopProcClass.Enabled) KeyPressed = KeyPressed || m.Msg==135 ; // WM_KEYxxx = 135,260,261,262
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 if (Enabled && SxWFTools.GetParentForm(StopImage)==Form.ActiveForm) try // in case of closing appli while a process using "StopProc" is in progress Point mp = System.Windows.Forms.Control.MousePosition; Rectangle r = new Rectangle(StopImage.PointToScreen(new Point(0, 0)).X, StopImage.PointToScreen(new Point(0, 0)).Y, StopImage.Width, StopImage.Height); if (KeyPressed || (mp.X > r.Left && mp.X < r.Right && mp.Y > r.Top && mp.Y < r.Bottom)) ... internal static Form GetParentForm(Control control) { Form result; if (control is Form) result = (Form)control; else if ((Object)control.Parent!=null) result = GetParentForm(control.Parent); else result = null; return result; }
En faite dans ma boucle while je voudrait mettre une fonction qui envoie un message via des Sockets avec le protocole UDP (que j'ai déjà !!!), mais il me manque juste la boucle qui me permettrais d'envoyer mon message grâce à ma fonction tans que le bouton est enfoncé.
Est-ce que ton intention est de tout envoyer ou de découper le message et de l'envoyer par petits morceaux en testant avant l'envoi du prochain morceau si la touche est encore enfoncée ?envoyer mon message grâce à ma fonction tant que le bouton est enfoncé.
En faite je doit envoyer une trame (ex: "0 -1 0 0 0") tout en vérifiant que mon bouton Envoyer est appuyer.
On peut gérer les event MouseDown/MouseUp du bouton pour activer/désactiver un Timer et, sur l'event Tick du Timer, envoyer la trame.
pourrais-tu me donner un exemple simple et concret s'il te plait parce que là je suis complètement perdu merci d'avance
Partager