Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Utilisation de reflexion [ Windows / Autre ] (MasterShadows)

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é 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

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.