none
validation automatique de champs RRS feed

  • Question

  • Bonjour,
    Je voudrais bien trouver une solution au problème suivant.
    J'explique le problème avec un exemple simple (et peut-être idiot) mais le problème est + général.
    J'ai 2 textbox T1 et T2 (T2 en lecture seule) éditant des nombres. Dans T2 il y a un nombre double de ce qu'il y a dans T1. C'est-à-dire que quand on met dans T1 un nombre (ex : 5), dans T2 s'inscrit 10.
    Bien sûr ceci peut se faire par programmation après le lost focus de T1, de modifier le text de T2 en conséquence.
    S'il y avait une infinité de controles textbox à mettre à jour (T2, T3....Tn) ce serait fastidieux et en plus il faudrait se, rappeler de faire cette modif...
    Y aurait-il un moyen "automatique" (par delegate ou je ne sais pas quoi d'autre) de faire cette mise à jour de T2...Tn après la modif de T1.
    J'avais pensé ajouter l'évenement lost focus de T1 à T2...Tn. Est-ce possible ?

    J'espère que c'était clair...
     
    lundi 24 novembre 2008 09:46

Réponses

  • Tu n'as qu'à pointer les deux évènements (via l'interface de Visual Studio) sur le même évènement.

     

    C'est la façon de faire et la façon recommander!

     

     

     

    lundi 24 novembre 2008 18:48
    Modérateur
  • Bonjour,

     

    D'abord préférez le traitement de l'évènement "Leave".

     

    Il suffit de traiter l'évènement LostFocus pour un textBox. Cela va créer une méthode du genre "XXXXXX_OnLeave".

    Pour les 2 autres TextBox, allez dans la fenêtres des propriétés des évènements et au niveau de la ligne "Leave", sélectionnez dans la liste la méthode "XXXXXXX_OnLeave".

     

    Cordialement

    jeudi 27 novembre 2008 21:58
    Modérateur
  • Bon, merci quand même pour votre réponse, mais je crois que je n'arriverai pas à exprimer ma demande d'une manière explicite. Ce n'est pas important. C'est peut-être qu'il n'y a pas de réponse à mon interogation.
    Si un jour je trouve la solution ou si je peux exprimer ma question sans ambiguité, je le ferai...

    Merci pour votre attention,

    Fred 
    dimanche 30 novembre 2008 08:42

Toutes les réponses

  • Salut,

     

    je n'ai pas trop compris le problème, mais moi je ferais sur l'event "textChanged" un

     

     

    T2.text = T1.ToString() * 2;

     

    je sais pas si c'est ça :/

     

    lundi 24 novembre 2008 12:21
  • Salut Kmel,

    Merci pour ta réponse...
    Mais mon problème n'est pas : comment mettre dans T2 une valeur double de celle de T1.
    Mon problème est le suivant en essayant d'etre plus clair.
    Prenons 3 textbox TA, TB et TC. TA et TB sont modifiables par l'utilisateur et le contenu de TC est la somme des valeurs de TA et TB.
    En suivant ton exemple, tu écriras dans les event  textChanged de TA et TB la ligne TC.text = (a+b).ToString() si a et b sont les valeurs dans TA et TB. Tu as donc écrit 2 fois la même ligne.
    Si le textbox pouvait hériter des "textChanged" de TA et TB, on écrirait l'instruction qu'une fois dans un event appartenant à TC et réagissant si TA ou TB est changé et qui mette à jour automatiquement TC..
    Je ne sais pas si cela existe.

    Merci pour ton attention,

    Bien cordialement,

    Fred
    lundi 24 novembre 2008 18:19
  • Tu n'as qu'à pointer les deux évènements (via l'interface de Visual Studio) sur le même évènement.

     

    C'est la façon de faire et la façon recommander!

     

     

     

    lundi 24 novembre 2008 18:48
    Modérateur
  • Excuse moi Biche, mais pourrais-tu me montrer comment pointer les 2 évents sur le même avec comme exemple des lost_focus des 3 textbox. Comment implémenter l'interface ?

    Merci d'avance,

    Fred
    lundi 24 novembre 2008 21:35
  • Bonjour,

     

    D'abord préférez le traitement de l'évènement "Leave".

     

    Il suffit de traiter l'évènement LostFocus pour un textBox. Cela va créer une méthode du genre "XXXXXX_OnLeave".

    Pour les 2 autres TextBox, allez dans la fenêtres des propriétés des évènements et au niveau de la ligne "Leave", sélectionnez dans la liste la méthode "XXXXXXX_OnLeave".

     

    Cordialement

    jeudi 27 novembre 2008 21:58
    Modérateur
  • Merci Mr TOURREAU pour votre réponse mais comme je l'avais signalé dans ma première publication, le problème était plus général et, malheureusement mes exemples vous ont induit en erreur (de ma faute). Depuis, j'ai réfléchi et je pense que l'exemple suivant va mieux expliquer le problème.
    J'ai par exemple 3 champs variables et un champ fonction des 3 premières.
    Bien sûr, quand l'utilisateur modifie au moins un des 3 champs variables, on peut ajouter l'action de recalculer le champ fonction.
    Ma question est la suivante: peut-on créer un évènement applicable à un champ. C'est-à-dire, quand un des 3 champs est modifié, l'évènement du champ résultant est appelé et celui-ci est recalculé.
    J'espère que c'est un peu plus clair maintenant....

    Merci d'avance pour votre aide,

    Fred
    vendredi 28 novembre 2008 10:38
  • Bonjour,

     

    Dans ce cas il faut traiter l'évènement TextChanged (par exemple) dans les 3 textbox.

    Ces 3 évènements doivent utiliser la même méthode (c.f. mon post précédent).

    Cette méthode doit réaliser le calcule pour mettre à jour votre textbox fonction.

     

    Cordialement

     

    samedi 29 novembre 2008 21:39
    Modérateur
  • Bon, merci quand même pour votre réponse, mais je crois que je n'arriverai pas à exprimer ma demande d'une manière explicite. Ce n'est pas important. C'est peut-être qu'il n'y a pas de réponse à mon interogation.
    Si un jour je trouve la solution ou si je peux exprimer ma question sans ambiguité, je le ferai...

    Merci pour votre attention,

    Fred 
    dimanche 30 novembre 2008 08:42
  • salut !
    peut être
    avez vous déjà trouver une solution a votre problème sinon essayer d'utiliser plutôt l'événement Validate :
    cet exemple calcul automatiquement une surface totale a partir d'une surface initiale et une autre surface excédentaire ,
    reproduire le code pour les deux textbox pour avoir la somme mise a jour a chaque modification.

    private void surface_initialeTextBox_Validated(object sender, EventArgs e)
            {
                Single s =0;
                s = System.Convert.ToSingle(this.surface_initialeTextBox.Text) +      System.Convert.ToSingle(this.surface_excedentaireTextBox.Text);
               
               
                    this.surface_totaleTextBox.Text = s.ToString();
                
            }

     

    jeudi 11 décembre 2008 22:56
  • Merci beaucoup pour votre réponse, j'avais trouvé une solution utilisant un setter de propriété qui équivallait à votre réponse.

    Bien cordialement,

    Fred
    vendredi 12 décembre 2008 22:18