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

Windows Forms Discussion :

Fusion de deux methodes?


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Par défaut Fusion de deux methodes?
    Bonjour,

    j'ai deux methodes qui sont presque identique :
    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
    22
    23
    24
    25
    26
    27
    28
     
     public void draw_radiobutton( string name, string text, int posx, int posy)
            {
                RadioButton myButton = new RadioButton();
                myButton.Name = "radiobutton_" + name + p as string;
                myButton.Text = text;
                myButton.AutoSize = true;
                myButton.Location = new Point(posx, posy);
                myButton.Size = new
                System.Drawing.Size(20, 20);
                ActiveForm.Controls.Add(myButton);
                val += myButton.Size.Width;
                val2 = myButton.Size.Width;
                p++;
            }
            public void draw_textbox(string name, int posx, int posy) 
            {
                TextBox myButton = new TextBox();
                myButton.Name = "textbox_" + name + v as string;
                myButton.Location = new Point(posx, posy);
     
                myButton.Size = new
                System.Drawing.Size(40, 20);
                ActiveForm.Controls.Add(myButton);
                val += myButton.Size.Width;
                val2 = myButton.Size.Width;
                v++;
            }
    Je voudrais ajouter un argument en lui passant l'argument un checkbox ou Textbox... Pour que j'ai plus qu'une seul methode .

    Comment puis je faire ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    beh tu rajoutes un argument de type controle et ensuite tu peux faire
    un test du genre

    if(mycontrol is TextBox) =>
    etc...

    The Monz, Toulouse

  3. #3
    Membre éclairé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2005
    Messages : 64
    Par défaut
    bonjour,
    vous pouvez utiliser les génériques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void draw<T>( string name, string text, int posx, int posy)
    {
                T myButton = new T();
                 ..... 
    }
    pour que ce code marche tu doit utiliser des contraintes sur cette métohode,
    cherche de coté de msdn il y a boucoup d'exemple

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Par défaut
    ok merci

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut
    Correctement est-il:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void Draw<T>(string name, string text, int posx, int posy) where T : Control, new()

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Par défaut
    Merci

    Ma question est la suivante pour doit on definir une contrainte ?
    where T : Control, new()
    Si j'ai bien compris : on dit que T est un control et qu'il sera instancie !

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Marsiou Voir le message
    Merci

    Ma question est la suivante pour doit on definir une contrainte ?
    Pour permettre certaines opérations

    Par exemple : L'utilisation de "new" implique que tu t'adresses à une classe et pas à une interface . Donc tu dois contraindre ton paramètre comme étant une classe.

    where T : Control, new()
    Si j'ai bien compris : on dit que T est un control et qu'il sera instancie !
    Non; ça dit que T doit être de type de base Control et disposer d'un constructeur public, dans le cas contraire la compilation échouera. (que tu apelles ou pas le constructeur dans ta méthode ne rentre pas en ligne de compte ici).

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public void Draw<T>(string name, <U> text, int posx, int posy) where T : Control, new()
    <U> peut etre un string ou object[];

    Est ce que c'est possible?

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut
    Non, c'est pas possible. que veux-tu faire?
    Ou peut-être ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Draw<TextBox, string>("test", "Foobar", 100, 70);
     
    // ...
     
    public void Draw<T,U>(string name, U text, int posx, int posy) 
          where T : Control, new()
    {
    }

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Par défaut
    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
     
    public void draw<T>(string name, string text, int posx, int posy) where T : Control
    {          
                T myButton = new T();
                myButton.Name =  name + z as string;
                //trouver le type de T si =  Combobox
                //myButton.Items.AddRange(text);
                //else
                //myButton.Text = text;
                myButton.AutoSize = true;
                myButton.Location = new Point(posx, posy);
                myButton.Size = new
                System.Drawing.Size(60, 20);
                ActiveForm.Controls.Add(myButton);
                val += myButton.Size.Width;
                val2 = myButton.Size.Width;
                z++;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    tab[i+1] = "jour/semain/moi"; //
    object[] tab2 = tab[i + 1].Split(new Char[] { '/' });
    draw.draw<ComboBox>(name, tab2, 300 + draw.val, posy);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tab[i+1] = "text ....."; // 
    draw.draw<Label>(name, tab[i + 1], 300 + draw.val, posy);

  11. #11
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut
    Hm, oui. Mais c'est très laid:

    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
    22
    23
    24
    25
     
    private void button1_Click(object sender, EventArgs e)
        {
          Draw<Label, string>("test", "hello", 100, 10);
          Draw<ComboBox, object[]>("test", new object[] { "hello", "world" }, 100, 70);
        }
     
        public void Draw<T,U>(string name, U text, int posx, int posy) 
          where T : Control, new()
        {
          T control = new T();
          control.Name = string.Format("{0}_{1}", control.GetType().ToString(), name);
     
          // bad code, no handling for exceptions aso...
          if( control is Label )
            control.Text = text as string;
          else if( control is ComboBox )
            (control as ComboBox).Items.AddRange(text as object[]);
     
          control.Location = new Point(posx, posy);
          control.Size = new Size(20, 20);
     
          if( ActiveForm != null )
            ActiveForm.Controls.Add(control);
        }

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Par défaut
    Merci beaucoup , j'avoue c'est un code bien moche :p.
    Je vais teste ca .

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Par défaut
    ok niquel cela marche mais pourrais tu m'expliquais ton code en detail.

    Merci

  14. #14
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut
    Je peux, mais la seule modification est la paramètre variable et l'instruction 'if' afin de réussir le type du composant.

    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
    22
     
    // le paramètre T est nouveau, il permet un objet avec le type variable
    public void Draw<T,U>(string name, U text, int posx, int posy) 
          where T : Control, new()
        {
          // vieux truc
          T control = new T();
          control.Name = string.Format("{0}_{1}", control.GetType().ToString(), name);
     
          // bad code, no handling for exceptions aso...
          if( control is Label ) // demander le type du composant...
            control.Text = text as string; //... et faire le traitement spécial
          else if( control is ComboBox )
            (control as ComboBox).Items.AddRange(text as object[]);
     
          // vieux truc aussi
          control.Location = new Point(posx, posy);
          control.Size = new Size(20, 20);
     
          if( ActiveForm != null )
            ActiveForm.Controls.Add(control);
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. deux methodes distantes
    Par BetterWorld dans le forum CORBA
    Réponses: 1
    Dernier message: 31/12/2006, 15h18
  2. Fusion de deux feuilles Excel
    Par pascal913 dans le forum Access
    Réponses: 20
    Dernier message: 20/07/2006, 13h28
  3. Probleme de fusion de deux librairie
    Par glycerine dans le forum MFC
    Réponses: 8
    Dernier message: 20/04/2006, 09h35
  4. problème requete sql fusion de deux count
    Par TuxP dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/12/2005, 15h15
  5. Fusion de deux états
    Par nancy54 dans le forum QuickReport
    Réponses: 2
    Dernier message: 07/06/2005, 19h07

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