[Resolu][C#.NET] Appel methode static impossible ?

Appel methode static impossible ? [Resolu][C#.NET] - C#/.NET managed - Programmation

Marsh Posté le 17-08-2006 à 09:24:29    

Bonjour,
 
J'ai 2 form:  
 
MainForm et OptionForm
 
Dans MainForm, j'ai une methode public void update() sans parametres qui update un composant appellé fenetre (le nom est codé en dur dans la fonction.) Tout marche très bien dans cette form.  
 
Maintenant, quand j'essaye d'appeller update a partir de l'autre form, il ne me propose pas la fonction, et si je la mets en static, il me dit "An object reference is required for the nonstatic field, method or proprtey "monProjet.mainForm.fenetre"
 
Pourquoi ? :sweat:
 
EDIT: Peut on déclarer des fonctions ou classes Friend, comme en c++ ?


Message édité par ParadoX le 17-08-2006 à 10:31:37

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 17-08-2006 à 09:24:29   

Reply

Marsh Posté le 17-08-2006 à 09:38:05    

tu peux poster du code ?


---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 09:42:06    


Dans mainForm:
 

Code :
  1. public static void update()
  2. {
  3. fenetre.Rows.clear();
  4. getFiles(path);
  5. }


 
"fenetre" est un dataGridView dans mainform
 
Dans optionsForm:
 

Code :
  1. ...
  2. mainForm.setPath(myPath);    // fonctionne (static)
  3. mainForm.update();  // ne fonctionne pas
  4. }


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 17-08-2006 à 09:42:39    

Code :
  1. mainForm::update();

Message cité 1 fois
Message édité par _darkalt3_ le 17-08-2006 à 09:43:35

---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 09:44:57    

_darkalt3_ a écrit :

Code :
  1. mainForm::update();



 
Hm non,
 
"The namespace alias qualifier "::" always resolves to a type or namespace so is illegal here. Consider using ".2 instead
 
:/


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 17-08-2006 à 09:49:13    

ah exact on est en c# [:smiley avec les dents cassées]


---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 09:57:13    

Ca m'avance paaaaaaaaaaaaaaaaaaaaaas :cry:  
 
Je précise que mainForm et optionsForm sont chacun une "partial class".


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 17-08-2006 à 10:05:18    

C'est à dire que c'est un peu bizarre de pas pouvoir appeler une méthode statique..., surtout quand on a qu'une composition ou aggrégation comme ca semble être le cas.
 
Tu peux en mettre plus ou en dire plus ?


---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 10:11:19    

Euh en fait j'ai un doute:  
tu mets le static juste pour tenter à ce que cela fonctionne ?
 
Parce que si t'es pas dans un contexte de statiques, ca va poser problemes.


---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 10:12:53    

Hm l'erreur vient de la form1: quand je passe la fonction en static, il me dit l'erreur d'en haut (reference machin) en montrant sur "fenetre" :/
 


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 17-08-2006 à 10:12:53   

Reply

Marsh Posté le 17-08-2006 à 10:16:46    

pourquoi tu passes la méthode en static ?


---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 10:20:08    

Pour pouvoir l'appeller de la optionsForm ! Le public ne suffit pas, aparamment... En fait, le but de la manoeuvre:
 
Dans mon application principale, il y a un bouton options. Alors jai fait une nuovelle form pour faire afficher une fenetre d'options. Mais dans ces options, on peut regler un chemin de dossier qui affectera la mainForm. Donc il faut que de la, je puisse appeller une fonction de mainForm. Suis-je plus clair ? :sweat:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 17-08-2006 à 10:22:41    

ParadoX a écrit :

Pour pouvoir l'appeller de la optionsForm ! Le public ne suffit pas, aparamment...


Ce n'est pas static qui aide à ce genre de choses !
 

ParadoX a écrit :

En fait, le but de la manoeuvre:
 
Dans mon application principale, il y a un bouton options. Alors jai fait une nuovelle form pour faire afficher une fenetre d'options. Mais dans ces options, on peut regler un chemin de dossier qui affectera la mainForm. Donc il faut que de la, je puisse appeller une fonction de mainForm. Suis-je plus clair ? :sweat:


 
Oui, mais c'est un probleme de design que tu as.
 
Pour arriver à tes fins, il faut que tu passes, par exemple à sa construction, à ta form d'options une référence vers ta mainform. Ensuite, tu pourras appeler ta fonction update, qui n'a à priori pas à être statique.


Message édité par _darkalt3_ le 17-08-2006 à 10:23:10

---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 10:26:00    

OK merci, c'est résolu ! :jap:


Message édité par ParadoX le 17-08-2006 à 10:30:25

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 17-08-2006 à 10:32:23    

Ben c'est pas très compliqué:
 
Le schéma de ta class option (:

Code :
  1. public class formOption
  2. {
  3.    public formOption(MainForm iMainForm)
  4.    {
  5.       mMainForm = iMainForm;
  6.    }
  7.    // ...
  8.    private MainForm mMainForm;
  9.    // ...
  10.    public MaMethodeQuiAppelleUpdate()
  11.    {
  12.        //...
  13.        mMainForm.Update();
  14.        //...
  15.    }
  16. }


 
Et a l'instanciation de ta form d'option quelque part dans ta mainform :

Code :
  1. lFormOption = new formOption(this);


 
 
Et hop.


---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 10:32:40    

:cry: grilled [:grilled]


Message édité par _darkalt3_ le 17-08-2006 à 10:32:55

---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 10:33:27    

Donc t'as bien capté qu'on met pas de static par hasard juste pour que ca "fonctionne" ?


---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 10:37:25    

Jep :jap:  
Désolé pour le grillage [:ddr555]  
 
Sinon, jai laissé en static une variable "cheminDuRepertoire", que l'on peut changer dans les options, et qui est utilisé dans la mainForm. C'est bien ca, l'utilité du static ? :) Qu'on puisse utiliser une fonction / variable commune a toutes


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 17-08-2006 à 10:45:13    

entre autres oui, hésite pas à lire de la doc là dessus :)


---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 23:10:52    

Si tu veux pouvoir exécuter ta fonction sans instancier un objet de la classe , à ce moment là il faut un static.
Si par contre, il est abbérant d'utiliser cette fonction sans utiliser une instance précise -> pas static
 
edit : en gros, même chose pour les fonctions + peut servir pour avoir un variable commune à toutes les instances de la classe


Message édité par Slay le 17-08-2006 à 23:12:08
Reply

Marsh Posté le 18-08-2006 à 09:36:52    

voire une instance unique d'une classe sur un modèle singleton ...

Reply

Marsh Posté le 18-08-2006 à 12:39:56    

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed