Bonjour,
Je vous propose de m'aider à résoudre un problème sur lequel je bloque un peu. donc voici le contexte :
Je suis en train de développer une application qui va permettre d’exécuter des commandes. Ces commandes sont composées d'une suite ordonnées d'actions.
par exemple, la commande "mettre à jour" va contenir une première action qui va faire un F5, et une seconde action qui va prononcer "page mise à jour" via la synthèse vocale.
NB : j'ai donc une FormCommand, et une FormAction dans lesquelles je configure tout ça. elles utilisent une classe "Commands" et une classe "Actions".
Afin de donner accès à l'utilisateur à un ensemble de fonction déjà toute faite, je lui donne la possibilité de choisir dans une comboBox dans la FormAction
cette comboBox est alimentée en allant faire la liste des méthodes qui se trouve dans ma classe "Fonctions". Donc dans ma FormAction, j'alimente la comboBox de la manière suivante :
Pour executer une action, j'utilise dans ma classe "Actions" la Reflection :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Fonctions MyFonctions = new Fonctions(); Type oType = MyFonctions.GetType(); MethodInfo[] ListMethods = oType.GetMethods(); comboBox_fonction.Items.Add("None"); foreach (MethodInfo mi in ListMethods) { comboBox_fonction.Items.Add(mi.Name); }
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 public string AppelMethode(string strParam) { Fonctions MyFonctions = new Fonctions(); Type oType = MyFonctions.GetType(); string strMask = ""; MethodInfo[] ListMethods = oType.GetMethods(); object objVal = null; foreach (MethodInfo mi in ListMethods) { if (mi.Name.ToLower().Equals(strMask.ToLower() + strParam.ToLower())) { objVal = mi.Invoke(MyFonctions, null); break; } } return "OK"; }
Cela exécute dans mon exemple :
jusque là... ça va ;-)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public void mettre_a_jour() { SendKeys.Send("{F5}"); FormHydra.synthEngine.SpeakAsync("test"); }
maintenant, je voudrais dans ma classe "Fonctions" pouvoir mettre une fonction qui va changer l'apparence de ma FormHydra (form principale)
exemple (qui ne marche pas) :
Ce qu'il se passe, c'est que dans ma classe "Fonctions", les objets ne sont pas connus dans cette instance...
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
24
25
26
27
28 public void ChangementModeAffichage() { int x; int y; if (FormHydra.Mode == 0) { FormHydra.FormBorderStyle = FormBorderStyle.None; Hydra.FormHydra.Opacity = 0.4; Mode = 1; TopMost = true; Width = 445; x = Screen.PrimaryScreen.WorkingArea.Width - Width; y = Screen.PrimaryScreen.WorkingArea.Height - Height; Location = new System.Drawing.Point(x, y); } else { FormBorderStyle = FormBorderStyle.Sizable; Opacity = 1; Mode = 0; TopMost = false; Width = 1150; x = Screen.PrimaryScreen.WorkingArea.Width / 2 - Width / 2; y = Screen.PrimaryScreen.WorkingArea.Height / 2 - Height / 2; Location = new System.Drawing.Point(x, y); } }
même en mettant le nom FormHydra comme j'ai essayé de le faire sur les premiers.
j'ai donc le message suivant :
une référence d'objet est requise pour la propriété la méthode ou le champ non statique.
comment faire pour que ma FormHydra et tous ces objets et variables soit reconnues et puissent être exploité dans ma classe "Fonctions" ?
j'ajouterai pour finir que j'ai bien tenté de créer une instance de FormHydra dans cette fonction comme ci dessous, mais certes ça compile cette fois, mais ça bloque lors de l'exécution.
Impossible de debuger, je perd le curseur lorsque je fais du pas à pas.
un grand merci d'avance,
Code : Sélectionner tout - Visualiser dans une fenêtre à part FormHydra formHydra = new FormHydra();
Partager