Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
882 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1426420
ParadoX
Posté le 17-08-2006 à 09:24:29  profilanswer
 

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
mood
Publicité
Posté le 17-08-2006 à 09:24:29  profilanswer
 

n°1426424
_darkalt3_
Proctopathe
Posté le 17-08-2006 à 09:38:05  profilanswer
 

tu peux poster du code ?


---------------
Töp of the plöp
n°1426425
ParadoX
Posté le 17-08-2006 à 09:42:06  profilanswer
 


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
n°1426426
_darkalt3_
Proctopathe
Posté le 17-08-2006 à 09:42:39  profilanswer
 

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
n°1426427
ParadoX
Posté le 17-08-2006 à 09:44:57  profilanswer
 

_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
n°1426432
_darkalt3_
Proctopathe
Posté le 17-08-2006 à 09:49:13  profilanswer
 

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


---------------
Töp of the plöp
n°1426435
ParadoX
Posté le 17-08-2006 à 09:57:13  profilanswer
 

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
n°1426437
_darkalt3_
Proctopathe
Posté le 17-08-2006 à 10:05:18  profilanswer
 

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
n°1426438
_darkalt3_
Proctopathe
Posté le 17-08-2006 à 10:11:19  profilanswer
 

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
n°1426439
ParadoX
Posté le 17-08-2006 à 10:12:53  profilanswer
 

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
mood
Publicité
Posté le 17-08-2006 à 10:12:53  profilanswer
 

n°1426441
_darkalt3_
Proctopathe
Posté le 17-08-2006 à 10:16:46  profilanswer
 

pourquoi tu passes la méthode en static ?


---------------
Töp of the plöp
n°1426445
ParadoX
Posté le 17-08-2006 à 10:20:08  profilanswer
 

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
n°1426446
_darkalt3_
Proctopathe
Posté le 17-08-2006 à 10:22:41  profilanswer
 

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
n°1426449
ParadoX
Posté le 17-08-2006 à 10:26:00  profilanswer
 

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
n°1426455
_darkalt3_
Proctopathe
Posté le 17-08-2006 à 10:32:23  profilanswer
 

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
n°1426456
_darkalt3_
Proctopathe
Posté le 17-08-2006 à 10:32:40  profilanswer
 

:cry: grilled [:grilled]


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

---------------
Töp of the plöp
n°1426458
_darkalt3_
Proctopathe
Posté le 17-08-2006 à 10:33:27  profilanswer
 

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


---------------
Töp of the plöp
n°1426465
ParadoX
Posté le 17-08-2006 à 10:37:25  profilanswer
 

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
n°1426469
_darkalt3_
Proctopathe
Posté le 17-08-2006 à 10:45:13  profilanswer
 

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


---------------
Töp of the plöp
n°1426936
Slay
Posté le 17-08-2006 à 23:10:52  profilanswer
 

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
n°1427008
_darkalt3_
Proctopathe
Posté le 18-08-2006 à 09:36:52  profilanswer
 

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

n°1427131
ParadoX
Posté le 18-08-2006 à 12:39:56  profilanswer
 
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

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

 

Sujets relatifs
[Résolu] Erreur de syntaxe, qui peut m'aider ?[Résolu] Bug embêtant avec les variables de session
[NSIS][Résolu] comparaison de stringdébutant - vérifier le résultat de mon code [RESOLU]
[Résolu]Signe non reconnu dans une boucle[RESOLU][CSS] Problème de float
[C#.Net] A la recherche d'un outil de charting (graphiques)[C#.NET] Remplir un DataGrid a partir d'un répertoire, help please !
[Résolu] [C#.Net] Passer un argument à partir d'une page Web 
Plus de sujets relatifs à : [Resolu][C#.NET] Appel methode static impossible ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR