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

C# Discussion :

cast et typof


Sujet :

C#

  1. #1
    r83
    r83 est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Points : 86
    Points
    86
    Par défaut cast et typof
    Bonsoir,

    J'ai plusieurs formulaires et j'aimerais créer, dans une classe à part une procédure pour automatiser la création de checkbox dans un contrôle de type panel. Pour l'instant ça marche

    La classe (dans le code, j'ai enlevé tout ce qui était positionnement,...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        class ClsUtilitaire
        {
            public static void AjoutCheckBox(Int16 nb, Panel UnPanel, Form uneForme, String UnPrefixe)
            {
                for (Int16 i = 0; i < nb; i++)
                {
                    CheckBox UneCheckBox=new CheckBox();
                    UneCheckBox.Name=UnPrefixe+i.ToString();
                    UnPanel.Controls.Add(UneCheckBox);
                }
            }
     
        }
    l'appel depuis un formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        public partial class FrmTest : Form
        {
            public FrmTest()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                ClsUtilitaire.AjoutCheckBox(5, panel1, this, "Essai_");
            }
        }
    Tout va bien.
    Par contre j'aimerais créer un eventHandler sur l'événement CheckedChanged.
    Là j'ai 2 soucis :
    Souci 1 : je n'arrive pas à caster le paramètre UneForme dans la classe du formulaire qui appelle la méthode AjoutCheckBox, et je suis obligé de déclarer le paramètre de type Form car la demande peut venir de plusieurs formulaires différents.

    Souci 2 : comment faire passer le nom de la méthode dans le paramètre de eventhandler ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UneCheckBox.CheckedChanged += new System.EventHandler(???)
    J'avais pensé créer la même méthode dans chaque classe Form, mais comme j'ai plusieurs panel qui peuvent accueillir des checkboxes, le souci 2 reste entier.
    ma question est donc, comment construire le paramètre à passer au constructeur du EventHandler ? ???

    En espérant avoir été clair,
    merci pour vos réponses

  2. #2
    Invité
    Invité(e)
    Par défaut


    Dans ces genres de situations il faut toujours penser à la notion de delegate. Un delegate est un pointeur vers une méthode. La plateforme .Net en fourni pas mal. Comme exemple nous avons la famille de delegate Action et Func.

    Pour ton cas à toi, j'utilise le delegate de type Action<object, EventArgs> et ta classe utilitaire doit ressembler à ça :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class ClsUtilitaire
    {
        public static void AjoutCheckBox(Int16 nb, Panel UnPanel, Action<object, EventArgs> callback, String UnPrefixe)
        {
            for (Int16 i = 0; i < nb; i++)
            {
                CheckBox UneCheckBox = new CheckBox();
                UneCheckBox.Name = UnPrefixe + i.ToString();
                UneCheckBox.CheckedChanged += new EventHandler(callback);
                UnPanel.Controls.Add(UneCheckBox);
            }
        }
    }

    Ton formulaire sera plutôt comme suit :
    Code C# : 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 partial class FrmTest : Form
    {
        public FrmTest()
        {
            InitializeComponent();
        }
     
        private void button1_Click(object sender, EventArgs e)
        {
            ClsUtilitaire.AjoutCheckBox(5, panel1, this.ActionToCallWhenCheckBoxStateChanged, "Essai_");
        }
     
        public void ActionToCallWhenCheckBoxStateChanged(object sender, EventArgs e)
        {
            // Tu mets ici la logique dépendant de ton formulaire
        }
    }

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    on peut aussi faire une form de base avec du code commun et en faire hériter toutes ses forms
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    r83
    r83 est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Bonjour,

    Un grand merci, ça marche super bien.
    mais alors, comment connaitre les delegate fournis....
    J'aurais bien des question sà vous poser !!!

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par r83 Voir le message
    mais alors, comment connaitre les delegate fournis....
    Pour Func et Action tu verras dans l'arborescence de droite les différentes déclinaisons qui sont pour la plupart des classes génériques

    PS : Pense à mettre à mettre STP

  6. #6
    r83
    r83 est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    merci, je vais voir ça. Résolu=OK

Discussions similaires

  1. [VB.NET] Cast d'une tablecell
    Par Pari dans le forum ASP.NET
    Réponses: 6
    Dernier message: 05/05/2004, 15h58
  2. Probleme CAST
    Par cedric31 dans le forum SQL
    Réponses: 2
    Dernier message: 16/02/2004, 10h46
  3. CAST ou autre ?
    Par 74160 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/07/2003, 15h00
  4. CAST DATETIME ----> SMALLDATETIME
    Par Guizz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/06/2003, 12h07
  5. traduction en delphi "reinterpreted cast"
    Par Chupakabra dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2003, 15h49

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