Actualiser un textbox contenant le resultat d'un produit

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

11 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
21 avril 2009 à 11:18
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 -
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
20 avril 2009 à 17:45
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 -
0
kmtaz Messages postés 26 Date d'inscription samedi 27 septembre 2008 Statut Membre Dernière intervention 16 juillet 2010
21 avril 2009 à 08:57
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
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
21 avril 2009 à 10:04
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 -
0

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

Posez votre question
kmtaz Messages postés 26 Date d'inscription samedi 27 septembre 2008 Statut Membre Dernière intervention 16 juillet 2010
21 avril 2009 à 10:21
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
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
21 avril 2009 à 10:37
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 -
0
kmtaz Messages postés 26 Date d'inscription samedi 27 septembre 2008 Statut Membre Dernière intervention 16 juillet 2010
21 avril 2009 à 10:50
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
0
kmtaz Messages postés 26 Date d'inscription samedi 27 septembre 2008 Statut Membre Dernière intervention 16 juillet 2010
21 avril 2009 à 11:47
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
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
21 avril 2009 à 11:56
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 -
0
kmtaz Messages postés 26 Date d'inscription samedi 27 septembre 2008 Statut Membre Dernière intervention 16 juillet 2010
21 avril 2009 à 11:57
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
0
kmtaz Messages postés 26 Date d'inscription samedi 27 septembre 2008 Statut Membre Dernière intervention 16 juillet 2010
22 avril 2009 à 09:09
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
0
Rejoignez-nous