IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

OnClick Passage de paramètre


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de flogreg
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 432
    Par défaut OnClick Passage de paramètre
    Bonjour,

    J'ai fait une recherche sans succès pourtant je pense que soit le problème se pose régulièrement soit je m'y prend mal (c'est fortement possible!).

    Sur une page j'ai 4 asp:ImageButton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        <asp:ImageButton ID="Gauche" OnClick="ClicGauche" runat="server" ImageUrl="images/fleche/gauche.gif" />
        <asp:ImageButton ID="Droite" OnClick="ClicDroite" runat="server" ImageUrl="images/fleche/droite.gif" />
        <asp:ImageButton ID="Haut" OnClick="ClicHaut" runat="server" ImageUrl="images/fleche/haut.gif" />
        <asp:ImageButton ID="Bas" OnClick="ClicBas" runat="server" ImageUrl="images/fleche/bas.gif" />
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
        protected void ClicGauche(object sender, EventArgs e)
        {
                SeDeplacer(0, -1);
        }
        protected void ClicDroite(object sender, EventArgs e)
        {
            SeDeplacer(0,1);
        }
        protected void ClicHaut(object sender, EventArgs e)
        {
            SeDeplacer(-1,0);
        }
        protected void ClicBas(object sender, EventArgs e)
        {
            SeDeplacer(1,0);
        }
        private void SeDeplacer(int cX, int cY)
        {
              .....
        }
    Il n'y a pas de problème de fonctionnement mais je trouve stupide de créer 4 évenements pour faire quasiment la meme chose !
    Au lieu d'appeler ClicGauche, ClicDroit, ... je souhaiterais appeler Clic(x, y) mais je ne sais pas comment faire.

    En bon noob, j'ai bien testé ca mais il n'en veut pas ^^ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        protected void Clic(object sender, EventArgs e, int x, int y)
        {
                ...;
        }
    Merci d'avance pour tout vos conseils.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 68
    Par défaut Utilisation du sender
    Solution 1

    Les contrôles Button possèdent deux propriétés utiles qui sont CommandName et CommandArgument. Leurs deux valeurs sont récupérables au niveau des évènements via le sender qui est en fait le bouton qui a provoqué l'évènement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected void MyButton_Click(object sender, EventArgs e)
    {
     string Command = (sender as Button).CommandName;
       string Argument = (sender as Button).CommandArgument;
    }
    Il suffit donc de s'appuyer sur ces deux propriétés pour paramétrer le comportement de chaque Button, puis de diriger les évènements vers un même code qui agira en fonction du paramétrage (en donnant par exemple à l'évènement click le même nom de méthode évènementielle).

    Dans votre cas on pourrait imaginer renseigner CommandName avec "DEPLACER" (car il faut toujours imaginer que votre produit peut avoir besoin d'évoluer et que de nouvelles fonctionnalités pourraient être ajoutées par la suite), puis utiliser CommandArgument pour préciser le déplacement, par exemple "1,0" ou "-1,0", ...

    Évidemment, il faudra interpréter CommandArgument, un code de ce genre ferait l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string[] Values = (sender asButton).CommandArgument.Split(',');
    int X = int.Parse(Values[0]);
    int Y = int.Parse(Values[1]);
    Attention : Il est vrai qu'un tel mécanisme à pour avantage de factoriser le code. Mais c'est aussi un mécanisme qui n'est pas vérifié à la compilation. Une modification malencontreuse d'une des valeurs de CommandName ou CommandArgument introduit donc facilement un bogue.

    C'est tout de même une solution à retenir surtout lorsque l'on a des mécanismes complexes à coder.

    Solution 2

    Votre cas étant simple, la solution suivante me parrait plus rapide. Basée sur le même principe qui consiste à diriger l'ensemble des évènements sur une même méthode évènementielle, voici à quoi pourrait ressembler le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    protected void MyButton_Click(object sender, EventArgs e)
    {
    if (sender == Button1)
    {
      ...
    }
    else if (sender == Button2)
    {
      ...
    }
    else if (sender == Button3)
    {
      ...
    }
    else if (sender == Button4)
    {
      ...
    }
    }
    Note : Le code ci-dessus bénéficie de tous les avantages apportés par la vérification à la compilation.

    Remarque générale

    Dans tous les cas, il est difficile de se prononcer quand à l'avantage de tel ou telle façon de faire dans votre cas car on ne peut pas dire qu'on y gagne en ligne de code ou en simplicité.

    Mais l'expérience montre que les codes factorisés sont plus faciles à maintenir. Il est donc bon d'avoir de bonne habitudes même sur de petits codes.

    Bonne continuation

  3. #3
    Membre éclairé Avatar de flogreg
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 432
    Par défaut
    Merci pour toutes vos réponses, je ne m'attendais pas à un cours si détaillé

    J'ai bien compris le CommandArgument qui permet de passer les arguments puis de les récupérer sous forme de tableau. Par contre je ne comprend pas bien l'utilité du CommandName. Pouvez vous me le réexpliquer svp ?

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/09/2012, 21h20
  2. Réponses: 2
    Dernier message: 09/12/2009, 09h44
  3. Passage de paramètres lors d'un onclick=.show()
    Par fayred dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/11/2007, 11h11
  4. passage de paramètres
    Par pram dans le forum XMLRAD
    Réponses: 5
    Dernier message: 18/02/2003, 17h28
  5. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo