bubbathemaster
Messages postés339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 2009
-
4 mai 2006 à 23:48
bubbathemaster
Messages postés339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 2009
-
5 mai 2006 à 17:16
Bonjour,
Y'a un truc que j'ai vraiment du mal à comprendre depuis que j'ai commencé le C#, c'est la portée des variables/objets. Déjà que j'ai mis du temps à comprendre que les variables globales étaient out, là, avec les objets je craque (et donc jviens poser ma tite question hehe)
En gros, j'ai une form frmMain qui a un panel1. Dans une autre forme, frmProperties, je souhaite modifier la couleur de fond du panel1 et donc accéder à ce foutu panel1.
Tout est dans le même namespace. J'ai essayé de bidouiller la déclaration de panel1 de private System.Windows.Forms.Panel panel1 à public, mais rien n'y fait. Si je place du code dans la public partial class frmProperties : Form, je n'ai pas accès au panel1 (frmMain.panel1 <- no go)
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 5 mai 2006 à 17:00
Salut,
Tu ne connais ton instance de frmForm1 que depuis le constructeur
Il faut stocker la reference dans une variable pour apres y avoir acces dans toute ta classe
Voila la version corrigée:
<HR>
public
partial
class
frmForm2 :
Form
{
frmForm1 _form1;
public frmForm2(
frmForm1 form1)
{
InitializeComponent();
form1.textBox1.Text =
"text a partir de la form2 !";
this._form1 = form1; // Stocke la reference vers l'instance de form1
}
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 5 mai 2006 à 05:44
Salut le problème ce n'est pas que tu n'as pas accès à frmMain.panel1 depuis ta deuxième forme, c'est que tu n'as même pas accès à frmMain tout simplement. Pour ça il suffit de passer dans le constructeur de ta 2ème forme, la variable frmMain.
public partial class Form1 : Form
{
public Form1( )
{
InitializeComponent( );
new Form2( this ).Show( );
}
}
public partial class Form2 : Form
{
public Form2( Form1 form1 )
{
form1.Controls[ "Panel1" ].BackColor = Color.AliceBlue;
}
}
bubbathemaster
Messages postés339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 20094 5 mai 2006 à 12:48
Si si, dans une procedure de la form2, je peux bien faire frmMain.
qqch, en particulier, je peux faire frmMain.var ou var est une variable
déclarée dans frmMain en tant que "static".
En fait, là tu passe la form1 en argument de la form2, moi je voudrais
que form1 soit publique et accessible n'importe ou, en particulier à
partir de form2.
C'est un peu comme en visual basic ou pour modifier une form1 à partir
d'une form2, il suffisait de faire, n'importe ou dans le form2 :
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 5 mai 2006 à 13:17
Salut,
Tu peux faire frmMain.qqchose(), mais toi ce que tu voudrais faire, c'est instanceDefrmMain.qqChose();
Et pour ca, la solution de Lutinore est la bonne.
A savoir que par convention, on met la premiere lettre d'un nom d'une classe en majuscule en C#.
La ca peut preter a confusion ;) -> voir ici
bubbathemaster
Messages postés339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 20094 5 mai 2006 à 16:40
Apres avoir modifié mon code selon les directives de Lutinore, j'ai effectivement accès à la form1, mais que dans "public Form2( Form1 form1 )".
Peut etre que je m'explique mal depuis le debut, alors j'ai uploadé ici :
http://xboxemul.free.fr/cspb.zip Un projet contenant deux form.
Depuis la premiere form, j'appelle une form2 qui doit modifier une textbox de la form1 en cliquant sur un bouton.
Est-ce que toi ou Lutinore pourriez vite fait le telecharger et me dire ce qui ne va pas ? Y'a 3 lignes de code, c'est juste pour l'exemple ;-)
bubbathemaster
Messages postés339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 20094 5 mai 2006 à 17:16
Un grand merci !
Ca marche impec ce coup ci !
En fait ca me semblait bizarre car on pourrait croire que :
this
._form1 = form1;
copie dans _form1 la form1, alors qu'en fait, on copie juste un pointeur vers la form1.