Afficher un string suivant le temps de pression sur une touche

chiqitoss Messages postés 7 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 28 mai 2009 - 12 mars 2009 à 15:59
chiqitoss Messages postés 7 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 28 mai 2009 - 15 mars 2009 à 13:47
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

7 réponses

WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
12 mars 2009 à 21:54
utilise l'evenement KeyDown pour detecter l'appui sur une touche, et KeyUp pour savoir quand la  touche est relachee.
Dans KeyDown, tu peux declencher un chrono (Stopwatch) et l'arreter dans KeyUp.
0
chiqitoss Messages postés 7 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 28 mai 2009
14 mars 2009 à 11:50
Ok, donc par exemple si je veux écrire dans la textbox4, je fais

private void textBox4_TextChanged(object sender, EventArgs e)
        {
            if (KeyDown)
            {
                Stopwatch.StartNew;
            }
            if(KeyUp)
           {
                Stopwatch. ?????
           }
            if(Stopwatch > 1000)
            textBox4.text = "ce que je veux";
           else
           textBox4.text = "autre ce que je veux";
        }

N'ayant pas sur moi mon projet, vous pensez que cela peut marcher? Merci
0
chiqitoss Messages postés 7 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 28 mai 2009
14 mars 2009 à 13:18
Après des recherches j'ai ça qui parait un peu mieux :

Donc enfet si j'appuie plus d'une seconde sur la touche retour arrière, je veux qu'il m'affiche un - et si c'est moins d'une seconde je veux qu'il m'affiche un .

voila ma fonction


private void textBox2_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
Stopwatch Temps = new Stopwatch(); // Initialisation de mon temps
if (e.KeyCode == Keys.Back)
{ // j'appuie sur backspace donc je lance le timer
Temps.Start();
}
if (e.KeyData != Keys.Back)
{ // backspace relaché , j'arrete le timer
Temps.Stop();
}
TimeSpan ts = Temps.Elapsed; // recupération de mon temps
if (ts.Milliseconds > 1000) // si c plus d'une seconde
{
textBox2.Text = ".";
}
else // si c moins
{
textBox2.Text = "-";
}
}

Le pb, c'est que rien ne s'affiche ! Donc si quelqu'un à des idées
0
RougailSaucisse Messages postés 118 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 décembre 2010 1
14 mars 2009 à 23:07
Comme l'a dis Wishhhmaster il faut arreter ton timer dans l'evenement keyup.
Dans keyDown tu demarres le timer, dans keyUp tu l'arretes. De plus je crois que l'evenemtn Keydown est appelé a plusieurs reprises tant que tu ne relaches pas la touche, il faudra donc veiller a ne declencher ton timer que la premiere fois.

tu pourrais faire un truc du genre (j'utilise pas de timer ici cependant):

private DateTime t1;
private bool isKeyDown = false;

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (!isKeyDown && e.KeyCode == Keys.Back)
{
isKeyDown = true;
t1 = DateTime.Now;
}
}

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (isKeyDown)
{
isKeyDown = false;
WriteCode(sender, DateTime.Now - t1);
}
}

private void WriteCode(object sender, TimeSpan tps)
{
char toWrite;

if (tps.TotalMilliseconds >= 1000)
toWrite = '-';
else
toWrite = '.';

((TextBox)sender).Text += toWrite;
}

Voila, ca devrait fonctionner je pense
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
15 mars 2009 à 07:13
Puis aussi si tu veux afficher des caractères quand tu appuies sur retour arrière, je ne vois pas trop l'intérêt de les afficher dans la même textbox que tu utilises pour détecter l'appui sur cette touche, car ça va les effacer non?
(A moins de mettre e.handled a true dans ton évènement keydown)
0
RougailSaucisse Messages postés 118 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 décembre 2010 1
15 mars 2009 à 10:29
effectivement tant qu'il ne deplacera pas le curseur cela fonctionnera correctement.
si en revanche il met le curseur a un position > 0, alors les caracteres vont s'effacer et effectivement pour parer a cela il faut gerer le e.handled.
Par contre je crois qu'il faut le placer sur l'evenement KeyPress et non KeyDown (pas sur) donc à rajouter:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if(IsKeyDown)
e.Handled = true;
}
0
chiqitoss Messages postés 7 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 28 mai 2009
15 mars 2009 à 13:47
Merci à vous deux, ça m'avance déja très bien!
Sur le coup j'avais mis Retour Arrière, cela peut être n'importe quelle touche.
Juste que j'avais pensé d'abord à la barre d'espace : c'est la première touche que l'on pense pour faire du morse, puis comme cela faisait un espace, c'était galère, pour finir jpense que je vais prendre un f3 ou autres.
Merci RougailSaucisse (même si je préfère le tomate), je mettrais le code dès qu'il sera fonctionnel!
0
Rejoignez-nous