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

kmtaz 26 Messages postés samedi 27 septembre 2008Date d'inscription 16 juillet 2010 Dernière intervention - 20 avril 2009 à 15:50 - Dernière réponse : kmtaz 26 Messages postés samedi 27 septembre 2008Date d'inscription 16 juillet 2010 Dernière intervention
- 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 

11 réponses

Répondre au sujet
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 21 avril 2009 à 11:18
+3
Utile
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 -
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de krimog
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 20 avril 2009 à 17:45
0
Utile
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
kmtaz 26 Messages postés samedi 27 septembre 2008Date d'inscription 16 juillet 2010 Dernière intervention - 21 avril 2009 à 08:57
0
Utile
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
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 21 avril 2009 à 10:04
0
Utile
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
kmtaz 26 Messages postés samedi 27 septembre 2008Date d'inscription 16 juillet 2010 Dernière intervention - 21 avril 2009 à 10:21
0
Utile
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
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 21 avril 2009 à 10:37
0
Utile
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
kmtaz 26 Messages postés samedi 27 septembre 2008Date d'inscription 16 juillet 2010 Dernière intervention - 21 avril 2009 à 10:50
0
Utile
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
kmtaz 26 Messages postés samedi 27 septembre 2008Date d'inscription 16 juillet 2010 Dernière intervention - 21 avril 2009 à 11:47
0
Utile
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
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 21 avril 2009 à 11:56
0
Utile
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
kmtaz 26 Messages postés samedi 27 septembre 2008Date d'inscription 16 juillet 2010 Dernière intervention - 21 avril 2009 à 11:57
0
Utile
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
kmtaz 26 Messages postés samedi 27 septembre 2008Date d'inscription 16 juillet 2010 Dernière intervention - 22 avril 2009 à 09:09
0
Utile
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.