Modification d'un texte [Résolu]

Signaler
Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
Statut
Membre
Dernière intervention
19 janvier 2008
-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
Salut à tous,

j'ai encore besoin de votre aide

Je voudrais faire un truc tout simple (enfin il me semble) mais je ne sais pas comment : je voudrais appeler un fonction lorsque je sors d'une textbox (ou richtextbox) uniquement si la valeur a été modifiée ?

J'ai essayé l'évènement Validated mais il est déclenché mais si je ne modifie pas le text
J'ai essayé l'évènement TextChanged mais il est déclenché dès que je modifie la valeur et non pas une fois que je l'ai modifié

Quelqu'un à une idée ??

Merci

23 réponses

Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Mais cette variable booleenne va ce mettre a 'true' tout de suite lorque tu va commancé à taper du text à mon avis.

_________________________________________________________________________
Woot
Alias Wouter Tjon.
Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
Statut
Membre
Dernière intervention
19 janvier 2008

Bon finalement voilà comment j'ai fait :

private

string originalText = null;

privatevoid client_codcomMaskedTextBox_TextChanged(object sender, EventArgs e)
{
   if (originalText != client_codcomMaskedTextBox.Text)
         client_codcomMaskedTextBox.Modified = true;
   else
         client_codcomMaskedTextBox.Modified = false;
}privatevoid client_codcomMaskedTextBox_Enter(object sender, EventArgs e)
{
      //On sauvegarde le text pour savoir s'il a été modifié
      originalText = client_codcomMaskedTextBox.Text;
}

privatevoid client_codcomMaskedTextBox_Leave(object sender, EventArgs e)

{
   this.CodePostal();

}

 
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Essaye de mettre un bouton pour valider ton text, puis intercepte cet évènement. Pour ensuite appelé la fonction.
Mais je ne pense pas que ce soit la meilleure solution;)

_________________________________________________________________________
Woot
Alias Wouter Tjon.
Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
Statut
Membre
Dernière intervention
19 janvier 2008

Merci d'avoir répondu aussi vite mais cette solution ne convient pas avec ce que veux faire.


En fait, cette textbox correspond  à  un code postal et je veux afficher le libellé une fois que l'utilisateur à saisi le texte, l'obliger à un cliquer sur un bouton, c'est pas le terrible.

Merci quand même
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Effectivement, en faite il faudrait trouver une propriété qui te dise que tu à quitter to, textBox, c'est ça?
Et donc rajouter :
if(textChanged==false)
   break;
else
   taFonction();

Si c'est ça dit le moi, je suis en train de chercher une solution.

_________________________________________________________________________
Woot
Alias Wouter Tjon.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
A la limite, tu peux utiliser une variable booleene que tu mets a true dans ton TextChanged, et lors de l'evenement Validated, tu regardes si cette variable est a true ou non

Mx
MVP C# 
Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
Statut
Membre
Dernière intervention
19 janvier 2008

woot, tu mets if(textChanged==false), textChanged est une propriété d'une textbox qui indique si le text a été modifié ?
Parce qu'il existe un événement Leave qui permet de savoir si je quitte la textbox, du coup il faudrait mettre ton code dans cet événement.
Ca devrait fonctionner ?
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Ce que je t'ais mis n'est pas faisable, il faudrait faire comme MorpionMx le préconise.
Avec ça, ça pourrait marcher je pense.

_________________________________________________________________________
Woot
Alias Wouter Tjon.
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Où alors, mais ça c'est un peu long comme solution, tu fait un Timer, tu lis ce qu'il y a dans ta textBox tout les x temps, puis lorsque le text de ton textBox est égale au libellé, tu appel ta fonction.

_________________________________________________________________________
Woot
Alias Wouter Tjon.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
>Où alors, mais ça c'est un peu long comme solution, tu fait un Timer, tu lis ce qu'il y a dans ta textBox tout les x >temps, puis lorsque le text de ton textBox est égale au libellé, tu appel ta fonction.



Euh... .
Entre ca et la solution de la variable booleene :
Quelle est la solution la plus facile a mettre en oeuvre ? La moins farfelue ? Et niveau perf  ?

Un peu de bon sens ... On est la pour aider, pas pour dérouter les gens.

Mx
MVP C# 
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Je suis d'accord avec toi, c'est vachemment lourd.
Mais il voulais appelé ca fonction seulement lorsque l'opérateur a fini d'écrire son texte.
Ce qui n'est pas le cas quand tu utilise ta solution;)

_________________________________________________________________________
Woot
Alias Wouter Tjon.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
Il suffit que dans la méthode associée a l'evenement TextChanged il se désinscrive de cet evenement pour que cette fonction ne soit appelée qu'une seule fois.
Et il se reinscrit a l'evenement lors du Validated.
Mx
MVP C# 
Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
Statut
Membre
Dernière intervention
19 janvier 2008

Je vais essayer la solution du booléen et me désinscrire de l'évènement mais ça me semble vraiment étrange qu'il n'y est pas une propriété qui indique si le text a été modifié.
Je peux pas essayer tout de suite je suis au boulot j'essayes ce soir.

Mais s'il existe une autre solution, je suis preneur

Merci  encore
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

MorpionMx->Tu pourrais me dire ce que signifie ce désinscrire?
J'avais jamais entendus ça!

_________________________________________________________________________
Woot
Alias Wouter Tjon.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
bah, tu peux t'inscrire aux evenements, comme ici TextChanged :

this.textBox1.TextChanged +=
new
EventHandler(textBox1_TextChanged);

(Ou comme ca:  this.textBox1.TextChanged +=
this.textBox1_TextChanged; )

Et te desinscrire de l'evenement, ainsi

this.textBox1.TextChanged -=
new
EventHandler(textBox1_TextChanged);

(Ou comme ca :  this.textBox1.TextChanged -= this.textBox1_TextChanged; )

Mx
MVP C# 
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Ok d'accord.
Merci...

_________________________________________________________________________
Woot
Alias Wouter Tjon.
Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
Statut
Membre
Dernière intervention
19 janvier 2008

J'ai une autre idée mais je ne sais pas si c'est possible.


Est ce que l'on peut tester si un évènement a été déclenché ? Si oui, dans le validated je teste si l'évènement textChanged a été déclenché et dans  cas j'appelle ma fonction


Ca peut se faire ?
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
C'est exactement ce que te propose de faire MorpionMx depuis le début :

Tu mets un booléen a vrai dans TextChanged, et tu test ce booléen dans Validated...
Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
Statut
Membre
Dernière intervention
19 janvier 2008

tout d'abord Nikoui, on commence par "bonjour". Ca fait plus d'1h qu'on échange sur le sujet et tu crois que j'ai pas compris ce que voulait MorpionMx.
Ce que je voulais faire c'était tester l'évènement directement, genre 
   if (textChanged != null) Appelle de la fonction
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
Impec, comme ca si l'utilisateur modifie le texte mais revient en arriere dans sa modification, ca agit comme s'il n'avait pas été modifié

Mx
MVP C#