Actions selon la durée de pression d'une touche - C#/.NET managed - Programmation
Marsh Posté le 15-03-2009 à 13:02:22
Pourquoi ne pas mettre ton Stopwatch dans la déclaration de ta Form, l'activer dans le KeyDown, l'arrêter dans le KeyUp, et de là récupérer la valeur du Stopwatch et mettre à jour ton textBox?
Marsh Posté le 15-03-2009 à 13:21:04
oui faut traiter les deux events.
KeyDown et KeyUp
Marsh Posté le 15-03-2009 à 17:49:47
Donc après des recherches, Déja je prends F3 comme touche d'appui!
j'ai ça :
Code :
|
Ca compile,s'execute mais ne fait rien quand j'appuie sur F3, des idées?
Marsh Posté le 15-03-2009 à 19:02:41
Et quand en debug, tu arrives pas à voir ce qui se passe (pas bien)?
Marsh Posté le 15-03-2009 à 22:15:55
A vrai dire, je ne connais pas très bien la programmation donc quand tu m parles de debug, ça ne me dit rien dsl. Le problème c'est que le prog ne rentre même pas dans la première fonction, j'ai mis un printf (enfin l'équivalent) dans le if dans la 1ère fonction, j"appuie sur f3 et rien ne s'affiche. Il me manque un je ne sais quoi qui m'énerve!
Marsh Posté le 16-03-2009 à 10:13:40
chiqitos a écrit : Il me manque un je ne sais quoi qui m'énerve! |
Fais des recherches pour ce que c'est que le mode debug, tu verras que ça pourra t'aider grandement
Et comment tu sais que tu ne rentres pas dans la première fonction d'abord?
Marsh Posté le 16-03-2009 à 12:37:58
Oui, j'appuie bien sur f3 dans la textbox2.
Sinon merci pour le debug, je me renseignerai.
Alors pour le fait que je ne rentre pas dans la première fonction, voici mon code :
Code :
|
Donc normalement, si j'appuie sur control dans la textBox2, le mot test devrait apparaitre dans la textbox2, non? Et bah quand j'essaye rien ne se fait.
Marsh Posté le 16-03-2009 à 17:20:41
Code :
|
L'astuce ici est que tant que tu gardes F3 appuyé, l'événement KeyDown est appelé, et donc time prend à chaque fois la même valeur, ce qui fait que tu auras toujours un temps < 1000ms entre le moment où tu relaches la touche et celui où l'évènement OnKeyUp est appelé. D'où le flag pressed qui se charge de ne pas mettre à jour le temps si la touche est déjà enfoncée...
Marsh Posté le 16-03-2009 à 18:59:14
Merci pour ces précisions, mais cela marche t-il chez toi? j'essaye encore en laissant des traces (printf) mais rien ne s'affiche.
Tu es sûr de ton : TimeSpan holdTime = DateTime.Now.Subtract(time); ?
Je ne connaissais pas. Merci
Marsh Posté le 16-03-2009 à 20:22:27
ReplyMarsh Posté le 16-03-2009 à 21:05:52
Donc chez toi ça marche, et chez moi non...
Alors s'il te plaît, vois-tu une erreur (même surement conne du fait que je commence la programmation) dans mon code:
Code :
|
J'ai supprimé les autres fonctions de ce code pour simplifier la vision. Vois tu quelque chose?
Marsh Posté le 17-03-2009 à 08:51:16
Je vais dire quelque chose de bête mais tu as rajouté tes méthodes aux évènements KeyDown et KeyUp de ton textBox ?
Bon après comme dit plus haut ca serait plus simple de mettre un breakpoint au début de chaque méthode et de vérifier si elles sont bien exécutées en debug.
PS: Tu as bien sélectionné ton textBox avant d'appuyer sur une touche ?
Marsh Posté le 17-03-2009 à 16:04:12
Quand tu perles des méthodes, c'est mettre:
public event KeyEventHandler KeyUp;
public event KeyEventHandler KeyDown;
???
D'ailleurs cela se met où? Entre les fonctions?
Sinon à chaque fois, je selectionne bien le bon textBox avant d'appuyer sur la touche Merci
Marsh Posté le 17-03-2009 à 16:19:52
Dans l'éditeur, tu dois sélectionner ton textbox, aller dans ses propriétés, et double cliquer sur les évènements KeyUp et KeyDown, ce qui aura pour effet de créer automatiquement les fonctions textBox1_KeyUp et textBox1_KeyDown.
Pour savoir si tu passes bien dans ces fonctions, tu dois cliquer au niveau de la première ligne de chaque fonction sur le bandeau tout à gauche de ta fenêtre de code, ce qui aura pour effet de surligner la ligne en rouge.
Ensuite tu vérifies que tu compiles bien en debug et pas en release, et ensuite tu lances ton programme en sélectionnant le menu Debug > Start Debugging (j'ai pas de VS en français)
Normalement quand tu passeras dans les fonctions VS viendra au 1er plan et t'indiquera sur quelle ligne tu te trouves actuellement.
Marsh Posté le 18-03-2009 à 13:36:27
Sinon à la main dans le constructeur:
textBox1.KeyDown += new EventHandler(textBox1_KeyDown);
Et il faut que tu saches debuuguer une application en effet, c'est vital
Marsh Posté le 18-03-2009 à 15:02:44
ov3rflow a écrit : Sinon à la main dans le constructeur: |
Pas besoin de se faire chier avec ça, l'EDI le fait tout seul quand on affecte un évènement
Marsh Posté le 18-03-2009 à 18:20:33
Ca va super vite aussi quand on le tape , la touche tab est ton amie
Moi j'aime pas trop passer par l'éditeur pour ça, mais c'est surement des habitudes de vieux , ça évite de switcher entre l'éditeur et le code quand on fait des tests.
Marsh Posté le 18-03-2009 à 20:14:19
Quand je dis que je débutais en C#, je débutes vraiment, je ne connaissais pas le système d'événements (l'éclair dans les propriétés)... Donc maintenant ça marche , merci beaucoup à vous
Marsh Posté le 14-03-2009 à 13:39:45
Alors déja, connaissez vous le morse?
Je voudrais le retranscrire en c# donc en gros quand j'appuie sur la barre d'espace plus de "n" temps je veux un certain caractère et si c'est moins de "n" temps je veux afficher un autre caractère.
SI quelqu'un a des idées je suis PRENEUR!!!!! je planche dessus depuis un certain temps mais rien d'interessant malheuresement! Merci beaucoup
voici mon essai, mais rien ne s'affiche :
Merci de votre aide