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

Dotnet Discussion :

Liste d'objet abstraits, besoin de connaître ses classes dérivées


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant / Technicien informatique
    Inscrit en
    Novembre 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant / Technicien informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 30
    Par défaut Liste d'objet abstraits, besoin de connaître ses classes dérivées
    Bonjour à tous, je suis sur un problème depuis quelques temps et j'ai besoin d'aide sur le sujet.

    Pour faire simple, je suis en train de créer des contrôles que je pourrais utiliser dans mes projets de jeux.

    Label, TextBox, Button, etc.

    Mes Buttons et mes TextBox peuvent être cliqués (TextBox pour lui donner le focus afin d'écrire dedans) et Button comme un bouton normal.

    Voici le code simple

    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
     
    public abstract class ClickableControl : AbstractControl
        {
            public event EventHandler OnClick;
     
            public ClickableControl(SFML.Graphics.Color BackgroundColor)
                : base(BackgroundColor)
            {
     
            }
     
            public void Click()
            {
                if (this.OnClick != null)
                {
                    this.OnClick(this, null);
                }
            }
        }
     
    public class Button1 : ClickableControl
        {
        }
    Lorsque je créé un GUI contenant plusieurs AbstractControl, je parcours mes éléments pour savoir si je suis par-dessus ou si je clique sur l'un d'eux par exemple. J'aimerais être capable de faire un foreach sur ma liste d'AbstractControl (ou de ClickableControl) sans nécéssairement connaître les types dérivés (Button dans ce cas). Pour le moment, je dois faire deux boucles foreach qui parcourent ma liste de contrôle (Liste.OfType<Button> et Liste.OfType<TextBox>). Je trouve pas ça très pratique, dans l'éventualité ou je pourrais créer d'autres contrôles cliquables. S'il y avait un moyen de juste faire un foreach sur Liste.OfType<ClickableControl>

    Est-ce possible?

    Merci d'avance.

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Salut,

    Via le framewok 4 c'est tout a fait possible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //ma liste contenant tous les items
    var lst = new List<IEnumerable<int>>();
     lst.Add(new List<int>());
    lst.Add(new LinkedList<int>());
     
    //la version filtree
    var filtree = lst.OfType<List<int>>();

    Desole pour l'exemple de liste dans des listes, la flemem de creer des types.

  3. #3
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Bonjour,

    comme tu es dans un projet de jeux :

    chaque bouton peut être un action (une arme par exemple ), chaque Contrôle à un rôle ou action donc tous le control peuvent avoir une classe dédiée pour les actions

    je m'explique plus ex : bouton (arme1) est lié à un objet d'une classe qui implémente un interface arme.
    ex:
    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
     
    interface IArme
    {
       void tire (int pointdechargeàretirerdelarme);
       void charge(int pointdechargeàajouteràarme);
    }
     
    class boutonArme:IArme
    {
    void tire (int pointdechargeàretirerdelarme)
    {
    // à toi de jouer 
    }
       void charge(int pointdechargeàajouteràarme){
    // à toi de jouer 
    }
    }
    et chaque bouton créer tu donner à ton bouton un id dans la property 'bouton.tag'
    et créer un dictionnary<int,IArme> qui contient tout les actions de tout tes bouton crées.

    et quand tu crées un bouton

    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
     
     dictionnary<int,IArme> mesarmesInmyCurrentGame= new dictionnary<int,IArme>();
     
     
    button bt=new button();
    bt.Tag=idunique;
    boutonArme btArme=new  boutonArme();
    bt.Click+=new EventHandler(Tire_Click);//associer tous les butons à un seul action de tire 
    //ajouter l'arme à la liste des armes en my game
    mesarmesInmyCurrentGame.Add(idunique,btArme);
     
    //l'action tire pour  toutes les armes 
    private void Tire_Click(object sender, EventArgs e)
    {
    //ici le sender c'est un objet button qui a était cliquer, car tu es sûr que c'est de type button
     Button arme= (Button)sender; 
    if (mesarmesInmyCurrentGame.containtkey((int)arme.Tag)
    {
      IArme armeTire=mesarmesInmyCurrentGame[(int)arme.Tag];
    armeTire.tire (10);
    }
     
    }
    désolé : je n'ai pas de Visual studio sur ma machine.

    bon courage

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/03/2011, 23h27
  2. Tri d'une liste d'objet CObList
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 13/07/2005, 14h50
  3. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 13h11
  4. [Kylix] Composant - Liste d'objet
    Par Metal3d dans le forum EDI
    Réponses: 1
    Dernier message: 13/12/2002, 23h17
  5. liste d'objets
    Par Pierrot dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2002, 10h56

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