ericdu93
Messages postés56Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention28 août 2008
-
5 mars 2008 à 01:57
ericdu93
Messages postés56Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention28 août 2008
-
5 mars 2008 à 11:25
cette personne a reçu une réponse de SharpMao, et ma question porte sur le code qu'il a donné dont je fais un copier coller ici:
Alores, voici un petit exemple :
public partial class Form1 : Form
{
private Form2 _f2= null;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (_f2 == null)
_f2 = new Form2(this);
_f2.Show();
Hide();
}
}
Et la Form2 :
public partial class Form2 : Form
{
private Form1 _f1 = null;
private Form2()
{
InitializeComponent();
}
public Form2(Form1 f1):this() // ici je bloque, je comprend pas
{
_f1 = f1;
}
Ce que je vois, c'est que le constructeur Form2 hérite de this(), qu'est-ce que ca veut dire ? D'ailleurs j'entends plutôt parler de class qui hérite d'une classe, c'est la première fois que je vois un constructeur qui fait de l'héritage.
SharpMaoa d'ailleurs fourni une explication sur le topic, mais j'ai pas réussi à le comprendre, je cite:
Avec ce constructeur tu permets à ton Form2 de connaître un Form1, et donc de l'afficher si besoin est.
Je vois pas à quoi ca sert que Form2 connaisse Form1, puisque Form1 est Form1 et on peut pas créer une nouvelle instance de Form1 sous peine de réinitialiser ces textbox par exemple.. donc voilà c'est un peu ambigu pour moi ca.
Pourriez vous m'aider à comprendre ?
Merci d'avance.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 5 mars 2008 à 03:50
Salut, ce n'est pas de l'héritage..
public class Base
{
// Appelle le constructeur de cette classe
// qui attend 2 arguments de type int.
protected Base( int x ) : this( x, 1 )
{
}
// Appelle le constructeur de la classe Object.
private Base( int x, int y ) : base( )
{
MessageBox.Show( String.Format( "x={0} et y={1}", x, y ) );
}
}
public class Derivee : Base
{
// Appelle le constructeur de cette classe
// qui attend 1 argument de type int.
public Derivee( ) : this( 1 )
{
}
// Appelle le constructeur de la classe de base
// qui attend 1 argument de type int.
private Derivee( int x ) : base( x )
{
}
}
"Je vois pas à quoi ca sert que Form2 connaisse Form1, puisque Form1 est Form1 et on peut pas créer une nouvelle instance de Form1 sous peine de réinitialiser ces textbox par exemple.. "
On ne souhaite pas créer une nouvelle Forme1, juste maintenir une référence sur elle, ce qui permet d'utiliser ses méthodes publics depuis Form2.
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 5 mars 2008 à 08:12
Hello,
Comme l'a dis Lutinor, :this() fait un appel au constructeur sans paramètres du même objet.
On aurait aussi pu ne pas faire cet appel, et mettre InitializeComponent directement dans le constructeur qui prend un paramètre.
Comme tu as besoin que ta Form2 connaisse une instance de Form1, j'ai préféré gardé le constructeur par défaut, mais le passer en privé, pour ne pas pouvoir créer de Form2 sans Form1.
J'ai également l'impression que tout n'est pas clair pour toi sur la différence entre une classe et une instance de cette classe.
Form1 et Form2 sont des classes.
Lorsque tu fais _f2 = new Form2(this); tu crées une nouvelle instance de Form2 en lui passant en paramètre une instance de Form1 (this).
Les seules méthodes ou propriétés que tu peux appeler sur ces classes sans les instancier, sont des méthodes ou propriétés statiques.
Les méthodes statiques ne sont pas utilisables dans ton cas, car chaque instance de Form1 doit avoir son propre TextBox, et pas le partager avec les autres.
C'est pour cette raison que tu ne pouvais pas faire Form1.textbox1.Text, textbox1 n'appartiens pas à la classe Form1, mais à ses instances.
J'espère que tu auras un peu mieux compris, et si je n'ai pas été très clair, n'hésite pas à redemander.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)