Actualiser un textbox contenant le resultat d'un produit [Résolu]

Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Dernière intervention
16 juillet 2010
- 20 avril 2009 à 15:50 - Dernière réponse :
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Dernière intervention
16 juillet 2010
- 22 avril 2009 à 09:09
bonjour,

j'ai créé un formulaire de saisis pour mettre à jour des valeurs d'une table dont l'une d'entre elles est obtenu par un produit. Mon problème est que le résultat s'affiche et se mets à jour seulement lorsqu'on essaye de rentrer une valeur dans le textbox conçue.

voici mon code sur le textbox donnant le résultat :

private

void NouveauMO_TextChanged(
object sender,
EventArgs e){        

this.NouveauMO.TextChanged +=
new System.
EventHandler(NouveauMO_TextChanged);

this.Calcule_nouveauMO();
NouveauMO.Text = ((
TextBox)sender).Text;
NouveauMO.Text =
Math.Round (_NouvMO,2).ToString();

this.Etat_bouton();

}

j'ai déjà tester des commandes comme refresh(), update() et application.DoEvents(), mais rien n'y fait

Si quelqu'un pouvait m'aider
merci d'avance
 

kmtaz
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
21 avril 2009 à 11:18
3
Merci
Alors enlève ton événement this.NouveauMO.TextChanged +=
new System.
EventHandler(NouveauMO_TextChanged);

et ajoute this.MOinitial.TextChanged += new System.EventHandler(NouveauMO_TextChanged);
this.Syntecinitial.TextChanged += new System.EventHandler(NouveauMO_TextChanged);
this.Synteccourant.TextChanged += new System.EventHandler(NouveauMO_TextChanged);

(tu peux d'ailleurs changer le nom de la méthode NouveauMO_TextChanged(), puisque son nom ne correspond plus)

Krimog : while (!(succeed = try())) ;
- Quand le règlement tu respecteras, ravis de te répondre on sera -

Merci krimog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de krimog
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
20 avril 2009 à 17:45
0
Merci
Salut

J'ai un peu de mal à comprendre : ta méthode NouveauMO_TextChanged() est exécutée au bon moment mais l'affichage n'est pas mis à jour ou ta méthode n'est pas exécutée au bon moment ?

Krimog : while (!(succeed = try())) ;
- Quand le règlement tu respecteras, ravis de te répondre on sera -
Commenter la réponse de krimog
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Dernière intervention
16 juillet 2010
21 avril 2009 à 08:57
0
Merci
Bonjour,

L'affichage du résultat n'est pas mis à jour automatiquement, c'est en voulant modifier sa valeur qu'il se mets à jour.
Je voudrais qu'il le fasse de manière automatique

kmtaz
Commenter la réponse de kmtaz
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
21 avril 2009 à 10:04
0
Merci
Je simplifie ma question :
1) Est-ce qu'il rentre dans ta méthode NouveauMO_TextChanged() au moment où tu le souhaites ? (cad au moment où tu veux que l'affichage se mette à jour)

J'aurais aussi besoin d'avoir des précisions en ce qui concerne ton code :
2) NouveauMO est-elle bien la textbox dans laquelle le résultat est censé s'afficher ?
3) Si oui, pourquoi faire le calcul sur le "TextChanged" de cette textbox et non à l'actualisation des données ? (à mon avis, c'est surtout ça le problème)
4) Pourquoi mettre this.NouveauMO.TextChanged +=
new System.
EventHandler(NouveauMO_TextChanged);
à l'intérieur de ton événement ?
5) Pourquoi affecter 2 valeurs à la suite à NouveauMO.Text ?

Krimog : while (!(succeed = try())) ;
- Quand le règlement tu respecteras, ravis de te répondre on sera -
Commenter la réponse de krimog
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Dernière intervention
16 juillet 2010
21 avril 2009 à 10:21
0
Merci
1) oui il rentre bien au moment où je le souhaite dans la méthode NouveauMO_TextChanged().

2) NouveauMO est bien la textbox où est censé s'afficher le résultat

3)effectivement le problème est peut-être là, je vais voir

4) cette commande figure déjà dans le designer de mon formulaire, c'est une erreur de ma part merci de me l'avoir montré

5)c'était pour faire des tests je garde maintenant seulement l'affichage avec l'arrondi(round)

Pour l'instant voici mes méthodes:

private

void NouveauMO_TextChanged(
object sender,
EventArgs e){

this.Calcule_nouveauMO();

NouveauMO.Text = Math.Round(_NouvMO, 2).ToString();

this.Etat_bouton();
}

private

double Calcule_nouveauMO(
){

double initial;

double indicinitial;

double indicourant;

double result;

if

(MOinitial.Text ==
""){
initial = 0;
NouveauMO.Text =

"";
}

else
{
initial =
double.Parse(MOinitial.Text);
}

if (Syntecinitial.Text ==
""){
indicinitial = 0;
NouveauMO.Text =

"";
}

else
{
indicinitial =
double.Parse(Syntecinitial.Text);
}

if (Synteccourant.Text ==
"")
{
indicourant = 0;
NouveauMO.Text =
"";
}

else
{
indicourant =
double.Parse(Synteccourant.Text);
}

if (NouveauMO.Text ==
"")
{
MO = 0;
}

else
{
MO =
double.Parse(NouveauMO.Text);
}

MO = (indicourant * initial) / indicinitial;
}

kmtaz
Commenter la réponse de kmtaz
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
21 avril 2009 à 10:37
0
Merci
1) et 3) sont pas censé être compatibles si 2) est vrai.
Tu dis qu'il doit mettre à jour au changement de valeur des données sources, or théoriquement ton événement est appelé au changement de valeur de la textbox cible.
4) Non seulement il ne sert à rien parce qu'il y en a un autre, mais également parce qu'il serait mal placé. Ça impliquerait que l'événement soit appelé alors même que tu n'as pas défini comment il serait appelé.

Mais en fait, une question plus simple : tu souhaites que la mise à jour soit faite quand ? A la modification des données sources je suppose. Elles sont rentrées à la main dans tes textbox ? Elles sont récupérées depuis une base de données (tu parlais d'une table dans ton 1er message) ?

Krimog : while (!(succeed = try())) ;
- Quand le règlement tu respecteras, ravis de te répondre on sera -
Commenter la réponse de krimog
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Dernière intervention
16 juillet 2010
21 avril 2009 à 10:50
0
Merci
Merci pour ces explications

En fait ma table est vide pour l'instant et le formulaire est là pour la remplir.
Les données sources sont rentrées à la main dans les textbox, et vous l'avez compris je souhaites que la mise à jour soit faite à la modifications de celles-ci.

kmtaz
Commenter la réponse de kmtaz
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Dernière intervention
16 juillet 2010
21 avril 2009 à 11:47
0
Merci
avec cette modofication, je n'arrive plus a saisir de chiffre dans mes texbox y me mets une erreur de format, pourtant je convertie chaque saisie en double

changer le nom de la méthode entraine des erreur car la modification appelle jsutement cette méthode (+= new System.EventHandler(NouveauMO_TextChanged);)

kmtaz
Commenter la réponse de kmtaz
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
21 avril 2009 à 11:56
0
Merci
Erreur de format => C'est dès que tu saisis un chiffe ou un point ?
Il faut bien comprendre que ta méthode est appelée à chaque fois que tu changes une valeur. Vérifie donc tout ce qui est division par 0, Parsing impossible...

tu peux essayer de mettre toute ta méthode dans un try catch de ce genre :
try
{
    // tout le code actuel
}
catch
{
    NouveauMO.Text = "Saisie non valide";
}

Changement du nom => Oui, évidemment, si tu changes le nom, il faut aussi le changer dans l'EventHandler.

Krimog : while (!(succeed = try())) ;
- Quand le règlement tu respecteras, ravis de te répondre on sera -
Commenter la réponse de krimog
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Dernière intervention
16 juillet 2010
21 avril 2009 à 11:57
0
Merci
Excusez-moi mais sa marche en faite, par contre lors de la 1ère saisis des valeurs sources le resultat ne s'affiche que lorsqu'on essaye de saisir une valeur dans le textbox correspondant (Nouveau_MO), et si en modifiant les valeurs sources en vidant complétement un textbox pour en saisir une nouvelle valeure, il me met une erreur de format.

Mais les modifications des valeurs sources en faisiant attention a ne pas vider complétement le champ de la textbox  actualise bien le resultat, merci beaucoup pour cette avancée.

kmtaz
Commenter la réponse de kmtaz
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Dernière intervention
16 juillet 2010
22 avril 2009 à 09:09
0
Merci
j'ai réussi a faire se que je voulais notamment grace à la méthode LostFocus(), je mets mon code qui servira peut-être à d'autres. Merci encore une fois pour votre aide.

public

Formulairesaisie(){

InitializeComponent();

this.MOinitial.KeyPress +=
new
KeyPressEventHandler(Controle_saisie);

this.Syntecinitial.KeyPress +=
new
KeyPressEventHandler(Controle_saisie);

this.Synteccourant.KeyPress +=
new
KeyPressEventHandler(Controle_saisie);

this.NouveauMO.KeyPress +=
new
KeyPressEventHandler(Controle_saisie);

this.MOinitial.TextChanged +=
new
EventHandler(
this.NouveauMO_LostFocus);

this.Syntecinitial.TextChanged +=
new
EventHandler(
this.NouveauMO_LostFocus);

this.Synteccourant.TextChanged +=
new
EventHandler(
this.NouveauMO_LostFocus);

this.MOinitial.LostFocus +=
new
EventHandler(NouveauMO_LostFocus);

this.Syntecinitial.LostFocus +=
new
EventHandler(NouveauMO_LostFocus);

this.Synteccourant.LostFocus +=
new
EventHandler(NouveauMO_LostFocus);

}

private

double Calcule_nouveauMO(){

double initial = 0;

double indicinitial = 0;

double indicourant = 0;

double MO = 0;

double.TryParse(MOinitial.Text,
out initial);

double.TryParse(Syntecinitial.Text,
out indicinitial);

double.TryParse(Synteccourant.Text,
out indicourant);

if (indicinitial > 0)
MO = (initial * indicourant) / indicinitial;

return MO;}

private

void NouveauMO_LostFocus(
object sender,
EventArgs e){

double MO = Calcule_nouveauMO();

bnValider.Enabled =
false;

if (MO > 0)
bnValider.Enabled =
true;
// On active le bouton "Valider"

// On affiche le resultat
NouveauMO.Text =
Math.Round(MO, 2).ToString(); }

kmtaz
Commenter la réponse de kmtaz

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.