begin process at 2012 02 11 10:18:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Autre

 > 

Utilisation de reflexion


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Utilisation de reflexion

dimanche 1 juin 2008 à 11:36:27 | Utilisation de reflexion

MasterShadows

Bonjour à tous et à toutes;

j'ai un soucis concernant la reflexion, mais je vais d'abord m'expliquer :

Dans le projet que j'effectue, je suis en train de mettre en place un système "WPF-like" sous XNA (mais on peut utiliser ce principe pour les Winforms), c'est à dire que j'aimerais que la création d'interface passe par un fichier XML et non plus par des centaines de lignes de code.

J'ai créer une bibliothèque pour le projet (nommé NeptuneEngine) dans laquelle est présente le GUI (button, checkbox, radiobutton pour le moment). Or si dans un de vos projets de jeux (nommons le QuackShot) vous voudriez utiliser le GUI, vous feriez ceci :

namespace QuackShot
{
      public class Game1 : Core
      {
            Button btn;

            // code
   
            public override void LoadContent()
            {
                  btn = new Button(this);
                  btn.Load("Content/Gui/Buttons/Aqua");
                  btn.Position = new Vector2(200, 100);
                  btn.Size = new Vector2(100, 25);
                  btn.Name = "Button1";
                  btn.Click += ClickEvent;
            }

            private void ClickEvent(Button Sender)
            {
                      if(sender.Name.Equals("Button1"))
                          // Effectue l'action que l'on veut
            }
      }
}

Jusque là, je suppose rien de très compliqué...
Maintenant c'est là que le problème se pose :

si mon bouton est défini dans le fichier XML comme ceci :

<Button Name="Bouton1" Width="100" Height="25" Skin="Content/Gui/Buttons/Aqua" Position="200 100" Event="ClickEvent" />

Et bien dans ma bibliothèque j'ai un procédé me permettant de générer ce bouton :

private Button CreateButton(GuiSettings Settings)
{
         Button btn = new Button(m_core);
         btn.Load(Settings.Skin)
         btn.Size = new Vector2(Settings.Width, Settings.Height);
         btn.Position = Settings.Position;

         btn.ClickEvent += ??????

         return btn;
}

Comme ça dans votre jeu, le procédé devient :

InterfaceCreator Interface = new InterfaceCreator(this);
Interface.Load("Content/Interfaces/MenuScreen");

Methode Update : Interface.Update(gameTime);
Methode Draw : Interface.Draw(gameTime);

Ainsi on gagnerait en simplicité et productivité...

Maintenant c'est là question que je pose, comment générer l'event ClickEvent ?

J'ai bien essayé cette technique :

Type

Type = m_core.GetType(); // Apparement récupère la classe de jeu ("QuackShot.Game1")

MethodInfo

Info = Type.GetMethod(Settings.Event);

btn.ClickEvent +=

delegate(Button sender)
{
        Info.Invoke(m_core, new object[] { sender });
};

Mais ça ne fonctionne pas. Le prgm plante toujours en me disant que l'objet ne correspond pas au type cible...
Alors j'ai changé m_core par btn, this, et tout un tas d'autres choses, mais rien ne fonctionne....

Je ne sais pas non plus comment récupérer le type cible...
Est-ce que quelq'un aurait une idée, parce que là je sèche....

Je suppose que la reflexion me permet de faire ce système WPF-like puisque WPF y arrive et doit utiliser un procédé similaire...

Merci des réponses que vous pourriez apporter....


Cette discussion est classée dans : button, interface, core, btn, settings


Répondre à ce message

Sujets en rapport avec ce message

Implementer une interface COM existante dans un object .NET [ par FrancoisC ] Bonjour,J'essaye d'implémenter une interface COM existantedans un object .NET (UserControl).Mais c'est interface n'est pas accessible par l'objet COM Remplissage de case rien de plus :/ [ par dJe781 ] "Alors là c'est si vous êtes désespéré et au bord du suicide :-)"Ca résume plutôt bien ^^Voilà, j'en suis au stade de vous proposer le défit du siècle changer la couleur des controls button c# [ par kalakalaboubou ] bonjour,quelqu'un connait-il comment changer la couleur des boutons d'une form dans une application pour Pocket PC en C#?je vous remercie d'avance interface media player [ par azyous ] qui a une ideé comment faire une interface qui ressemble a media player avec visual c# Interface IDbDataAdapter [ par jacma ] BonjourQuel est l'intérêt d'implémenter l'interface IDbDataAdapter plutôt que de se servir directement de SqlDataAdapter?Merci interface MDI et réduction [ par coq ] bon voilà : quand on reduit une fenetre enfant dans un MDI, il reste une "petite boite" avec la barre de titre et les 3 box de controle (fermer, agran Chat avec interface graphique !!!!!! [ par saku_ ] Salut tout le monde !!!! J'ai réalisé un Chat en C# en mode Console, mon souci est que je n'arrive pas à faire l'interface. Serait il de me donner u [WINFORMS] - Datagrid & Button [ par koala59 ] Bonjour a tous,j'aimerais savoir si il est possibile et comment biensur, d'effectuer une insertion d'un bouton dans un datagrid en developpement winfo Affichage d'une interface au click d'un control TextBox en ASP.NET [ par Alex009 ] BonjourJ'ai un formulaire( xyz.aspx) avec plusieurs controls de textbox qui prendront le detail de chaque article, j'aimerai afficher une interface(ou Interface ? [ par ToshiBaba ] Bonjour,J'ai un souci de conception dans mon projet C#, peut-être que vous pourrez m'aider Ce que je veux faire :une MDI qui instancie quand le besoin


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,669 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales