Bonjour à tous,
Je suis confronté à un problème de mécanisme de programmation assez particulier : je travaille au développement d'une application en C# et dans laquelle certains boutons graphiques doivent activer diverses fonctions. Les boutons à créer sont stockés dans un fichier de configuration que je lis au début de mon programme (fichier du style "nom de bouton -> action à lancer"). Ma question est de savoir dans quel type de structure stocker proprement les boutons, de manière à stocker les fonctions associées à lancer.
Une première idée était de stocker une chaine contenant le nom de la fonction.
Exemple :
Classe "Bouton" :
Code principal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class Bouton { String actionAssociee; public Bouton(String actionLancee) { actionAssociee = actionLancee; }
Le souci, c'est que ça n'est pas du tout générique puisque je suis obligé d'écrire en dur dans le code l'association entre le bouton "toto" et l'action lancée toto().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 ... List<Bouton> listeDeBoutons; ... // ici, je lis mon fichier de config en // extrayant nom de bouton et action // associée et pour chaque bouton, je fais : listeDeBoutons.Add(new Bouton(nomDeBouton)); ... if (boutonClique.actionAssociee.Equals("toto")) toto();
En fouinant un peu sur le net, je suis tombé sur les delegate, concept que je ne connaissais pas jusqu'à présent. Si j'ai bien tout compris suite à mes lectures, je peux avoir quelque chose du style :
Classe "Bouton" :
Code principal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class Bouton { private delegate void action(); action actionAssociee; public Bouton(String actionLancee) { actionAssociee = new action(actionLancee); }
Sauf qu'apparemment, je ne peux pas donner de chaine de caractères en paramètre lors de l'instanciation de Bouton. J'obtiens une erreur "actionLancee est une variable mais est utilisée comme une méthode". Le truc, c'est que je ne veux surtout pas donner explicitement de nom de méthode (ça ne me ferait au final que ré-écrire en dur l'association bouton->méthode).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ... listeDeBoutons.Add(new Bouton(nomDeBouton)); ... boutonClique.actionAssociee();
Est-ce que vous auriez une idée de comment mettre en place un système qui me permette de gérer proprement tout ça ?
Merci d'avance pour vos explications.
Partager