drx7
Messages postés16Date d'inscriptiondimanche 27 mai 2007StatutMembreDernière intervention 8 juin 2009
-
1 juin 2009 à 22:25
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 2015
-
8 juin 2009 à 15:45
bonsoir
je n'arrive pas à résoudre le probleme suivant:
1er cas
Avec l'interface graphique de visualstudio je crée un panel et en ligne de code à l'aide de "controls.Add" j'y ajoute une picturebox, ca marche impecable;
2eme cas
je ne passe pas par l'interface graphique, je crée une methode qui ajoute un panel et ensuite même maneuvre à l'aide de controls.Add j'y ajoute une pictureBox.Et la erreur, lors de la compilation il me dit que je ne peut pas ajouter la picturebox car le panel n'existe pas dans le contexte acutel?
drx7
Messages postés16Date d'inscriptiondimanche 27 mai 2007StatutMembreDernière intervention 8 juin 2009 2 juin 2009 à 17:45
RE:
voici la partie du code:
-----------------------------------------------------------------------------------------------
Panel panel5 = new Panel();
this.Controls.Add(panel5);
panel5.BackColor = Color.Blue;
panel5.Size = new Size(Size.Height + 200, Size.Width);
panel5.Size = new Size(Size.Height + 200, Size.Width);
--------------------------------------------------------------------------------------------------
et la fonction picturebox_panel()
--------------------------------------------------------------------------------------------------
public void picturebox_Panel(string AdrImg, string name, int posX, int posY)
{
PictureBox ImgInPane2 = new System.Windows.Forms.PictureBox();
ImgInPane2 = new System.Windows.Forms.PictureBox();
ImgInPane2.BackColor = System.Drawing.Color.Red;
ImgInPane2.SizeMode = PictureBoxSizeMode.StretchImage;
ImgInPane2.Location = new System.Drawing.Point(posX, posY);
ImgInPane2.Name = name;
ImgInPane2.Size = new System.Drawing.Size(180, 130);
ImgInPane2.Image = System.Drawing.Image.FromFile(AdrImg);
panel5.Controls.Add(ImgInPane2);
}
------------------------------------------------------------------------------------------------------
l'érreur est située dans la fonction "picturebox_panel" derniere ligne, le compilateur me dit que panel5 n'existe pas dans le contexte acutel!
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 2 juin 2009 à 18:12
Les variables locales d'une méthode ne se propagent pas automatiquement aux méthodes qu'elle appelle, et heureusement.
Si tu as besoin de l'instance de Panel représentée par panel5 dans la méthode picturebox_Panel, il va falloir passer la référence en paramètre de cette dernière.
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 2 juin 2009 à 20:07
En l'occurence le mot clé ref ne sert à rien dans ton cas : tout ce que tu veux c'est passer la référence déjà initialisée et l'utiliser.
Le type Panel étant une classe, et donc un type référence, le passage de paramètre se fait déjà par référence =>
public void IMG_IN_PANEL(string AdrImg, string name, int posX, int posY, Panel X)
...
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 8 juin 2009 à 15:45
Déjà, tu as le droit de tenir compte de ce qu'on te dit dans les réponses : le mot-clé ref est totalement inutile devant Panel, puisque Panel est une class, et donc le passage se fait par référence. Le mot-clé ref peut parraître ambigü.
Donc tu peut le virer de tes paramètres de méthode.
Ensuite, il faut que tu regardes le concept objet, car tu ne sembles pas savoir ce qu'est un "membre" (ou "attribut", selon les langages). Car en l'occurrence, avoir une référence à ton panel en membre, c'est une solution très simple à ton problème.
Enfin, fait également attention aux opérateurs d'accès à tes méthodes (public / private / protected / internal). Une méthode doit toujours avoir l'accès le plus faible duquel tu vas l'appeler (par exemple, si tu accèdes à une méthode uniquement à partir d'autres méthodes de ta classe => private).
Donc pour résumer, relis des cours / tutos sur la programmation orientée objet, et tu auras la solution à ton problème.
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -