Debutant rencontre prb en C#

Signaler
Messages postés
12
Date d'inscription
lundi 4 octobre 2004
Statut
Membre
Dernière intervention
24 juillet 2007
-
Messages postés
12
Date d'inscription
lundi 4 octobre 2004
Statut
Membre
Dernière intervention
24 juillet 2007
-
J'ai modifié un programme qu'un collegue avait créé et je ne comprend pas pourquoi j'ai des erreurs:

Voila un apercu qui doit pouvoir vous permettre de me mettre sur la voie:

Code:
namespace expes
{
public class Form1 : System.Windows.Forms.Form
{

private int max_signs;
public Form1()[...]
.......
static void Main()
{

Application.Run(new Form1());

max_signs = 50;

....
}

Sur max_signs "celui de l'affectation" ( = 50) il me met l'erreur :Citation:
"Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'expes.Form1.wb'"

Si ca vient d'ailleurs demandez moi d'envoyer une autre partie mais le prog est assez long je vx pas tout envoyer non plus.

Merci a bientot

7 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Quand tu déclares max_signs, il faut que tu le déclares en static

 private static int max_signs; 


Mx
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
57
Ce qu'a dit MorpionMx est tout à fait juste, ça vient du fait que tu ne peut pas utiliser des variables de class dans un context static comme le main!
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
je viens de VB.net et le static je connais pas, vu que c'est un peu le thème du problème, qqn pourrait m'expliquer ce que veut dire en détails le mot clé static, et m'expliquer en détails le pourquoi du comment on doit declarer la variable en static ?

merci

Cyril
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
64
Hello,
static est un concept objet. Lorsque tu fait
Application.Run(new Form1()); 
tu crée un nouvel objet de type Form1.
Si tu veux modifier un membre de la classe Form1, tu as plusieurs possibilités :
- Le déclarer private comme dans ton code et le modifier depuis le constructeur, une méthode ou un accesseur public de Form1.
- Le déclarer public et le modifier depuis l'extérieur.
-Le déclarer static, mais là, attention!! Les membres statiques sont partagés entre toutes les instances d'une classe. En fait, il n'y a même pas besoin de faire un new pour en modifier la valeur. Ca ne change peut-être pas grand chose pour un Form, mais en règle générale, il faut faire attention.

Voici une solution qui doit fonctionner :
namespace expes 
{ 
public class Form1 : System.Windows.Forms.Form 
{ 

private int max_signs; 
public int MaxSigns{
 get{
  return max_signs;
 }
 set{
  max_signs = value;
 }
}
public Form1()[...] 
....... 
static void Main() 
{ 
Form1 f1 = new Form1();
f1.MaxSigns = 50;
Application.Run(f1); 

.... 
} 


Amicalement, SharpMao
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
donc si j'ai bien compris, qd on met qqchose en static on a ensuite pas besoin de l'initialiser?
c'est pareil que pour les string ? qd on fait

string name;
static void Main()
{
name = @"Cyril";
}

Je n'ai pas instancié ma string est pourtant ca marche

et si je fais

public class Personne
{
public string name;
static Personne()
{}
}

static Personne oP;
static void Main(){
oP.name = "Cyril";
}

d'apres ton explication ce code devrait marcher ? pourtant j'ai pas instancié mon objet personne

mais si je fais

public class Personne
{
public string name;
static Personne(string Name)
{
this.name = Name;
}
}

static Personne oP;
static void Main(){
Console.WriteLine(oP.name);
}

Ce code ne devrait pas marcher je pense.

j'ai toujours pas compris l'utilisation de static qqn pour m'eclairer ? et je me demande si ca a un rapport avec le fait que qd on utilise un string ou tout les types de bases on est pas objet de les instancier

Merci de m'eclairer

Cyril

PS : tout les codes que j'ai ecrit ci dessus j'ai pas pu les tester j'ai pas de compilateur ou je suis :(
Messages postés
12
Date d'inscription
lundi 4 octobre 2004
Statut
Membre
Dernière intervention
24 juillet 2007

Oki j'ai juste fait:

Form1 f1 = new Form1();
f1.MaxSigns = 50;
Application.Run(f1);

Ca marche come sur des rouletes j'av eu l'astuce d'un autre forum en fait merci a tous a bientot
Messages postés
12
Date d'inscription
lundi 4 octobre 2004
Statut
Membre
Dernière intervention
24 juillet 2007

Oki j'ai juste fait:

Form1 f1 = new Form1();
f1.MaxSigns = 50;
Application.Run(f1);

Ca marche come sur des rouletes j'av eu l'astuce d'un autre forum en fait merci a tous a bientot