Formulaire a accès multiple

clem44nantes Messages postés 14 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 20 mai 2009 - 18 mai 2009 à 14:41
 cs_nasros86 - 30 mai 2011 à 18:05
Bonjour à tous depuis quelques jours je suis sur un problème avec mon application, j'ai mon 1er formulaire avec 2 boutons, 1 pour afficher le second formulaire(qui lui mm comporte 1 bouton pour afficher le 3ème formulaire), et le second qui affiche directement le 3eme formulaire. Microsoft Visual studio me génère une erreur "



 'passage_valeur.Form3' ne contient pas un constructeur qui accepte des arguments '0'   


 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>


voici le code :


 


Form1:


 




       
private
void button1_Click(object sender, EventArgs e)






        {






           
Form2 form2 = newForm2();






            form2.Show();






        }






 
    
private
void button2_Click(object sender, EventArgs e)






        {






           
Form3 form3 = newForm3(this);






            form3.Show();






        }





Form2 :





public

partial
class
Form2 : Form






    {






       
public Form2()






        {






            InitializeComponent();






        }





 






       
private
void button1_Click(object sender, EventArgs e)






        {






           
Form3 form3 = newForm3();






            form3.Show(); 






       

}





Form3:





private

void button1_Click(object sender, EventArgs e)






       

{






            form1.button1.Visible = false;






        }





 





merci pour votre aide

24 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
18 mai 2009 à 15:12
Bah c'est pourtant simple (en plus il doit te dire la ligne où ça plante) : Form3 form3 new Form3(this);> La classe Form3 n'a pas de constructeur acceptant un premier argument (argument 0)

car dans Form3, tu as
public Form3()
{
    InitializeComponent();
}

soit tu as besoin de la référence à form1 dans form3, dans ce cas change ton constructeur (ce qui semble être le cas puisque tu utilise ta form1 dans ta form3 :
public Form3(Form1 maForm1)
{
    InitializeComponent();
    this.form1 = maForm1;
}

soit tu n'en a pas besoin dans ce cas change ton appel :
From3 form3 = new Form3();

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
clem44nantes Messages postés 14 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 20 mai 2009
18 mai 2009 à 15:56
Merci pour ta réponse, j'ai rajouté ce que tu m'a dit et sa marche, maintenant je voudrai appuyer sur mon bouton dans le form3 pour cacher le bouton de mon form1, j'y arrive du form1 au form2 mais pas du form1 au form3
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
18 mai 2009 à 16:14
Bah si tu utilises
public Form3(Form1 maForm1)
{
    InitializeComponent();
    this.form1 = maForm1;
}

que tu as un membre de Form3 :
private Form1 form1;

et que tu crées ta form3 :
Form3 form3 = new Form3(this);

ça ça marchera dans form3 (comme tu l'as mis dans ton code) :
form1.button1.Visible = false;

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
clem44nantes Messages postés 14 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 20 mai 2009
19 mai 2009 à 08:59
j'arrive a modifier mon bouton 1 dans form1 depuis mon boutton dans form3, le seul souci c'est quand je veux rajouter l'ouverture du form3 dans le form2(Erreur 1 'passage_valeur.Form3' ne contient pas un constructeur qui accepte des arguments '0)





Form 1 :




 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>






public

partial
class
Form1 : Form






    {






       
public Form1()






        {






            InitializeComponent();






        }






       
private
void button1_Click(object sender, EventArgs e)






        {






           
Form2 form2 = newForm2();






            form2.Show();






        }






       
private
void button2_Click(object sender, EventArgs e)






        {






           
Form3 form3 = newForm3(this);






           

form3.Show();






        }





 





Form2 :





 





public

partial
class
Form2 : Form






    { 






       
public Form2()






        {        






           InitializeComponent();






        }





 






       
private
void button1_Click(object sender, EventArgs e)






        {






           
Form3 maform = newForm3(); ERREUR ICI!!!!!!!!






            maform.Show();






         








       

}





 





Form3 : publicpartialclassForm3 : Form






    {






       








       
private
Form1 form;






       
public Form3(Form1 maform)






        {






           








           
this.form = maform;






            InitializeComponent();






        }





 






       
private
void button1_Click(object sender, EventArgs e)






       

{






            form.button1.Visible = false;






        }





 





 





 





 





 





 





 





 





 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
19 mai 2009 à 09:57
Bon, là désolé, mais je ne te fournirai pas de code. Réfléchis un peu avant de poser ce genre de questions.
Le compilateur de dit où est l'erreur et quelle est l'erreur. A toi de la corriger (attention que ce n'est pas parce que l'erreur est à un endroit que c'est à cet endroit qu'il faut changer quelque chose). Car ce genre d'erreur, tu risques d'en rencontrer souvent, et si tu n'arrives pas à la corriger toi-même...

(A ceci près que ça risque d'être un poil plus compliqué si tu veux que le bouton de ta form2 soit caché en cliquant sur le bouton de ta form3)

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
clem44nantes Messages postés 14 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 20 mai 2009
19 mai 2009 à 13:41
Merci pour ton aide, je vien de finir le code, visual studio ne me génère aucune erreur, lors de la compilation, sauf que quand je suis dans le programme dans mon formulaire 3 je click sur le bouton pour cacher un bouton dans le premier formulaire il me met une erreur(le référence d'objet n'est pas définie à une instance d'un objet), j'ai éssayer pour cacher un bouton du formulaire 2 ou 3 sa marche. si je pouvais avoir quelque éclaircie sur l'erreur qu'il me génère.merci beaucoup
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
19 mai 2009 à 13:56
Petite astuce :
l'erreur "la référence d'objet n'est pas définie à une instance d'un objet" arrive quand tu fais
monObjet.membre
monObjet.Propriété
ou monObjet.Méthodealors que monObjet null.> de manière générale, un
if(monObjet != null)
{
    //...
}
suffit

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
clem44nantes Messages postés 14 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 20 mai 2009
19 mai 2009 à 14:30
toujours le même problème avec le if, c'est vraiment bizarre car la communication se fait bien entre les 2 formulaires
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
19 mai 2009 à 15:19
C'est que tu n'as pas mis le if au bon endroit.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
clem44nantes Messages postés 14 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 20 mai 2009
19 mai 2009 à 15:24
je ne voi vraiment pas ou je dois mettre le if, je l'ai mi dans mon form3 au niveau du click sur le bouton pour cacher, monobjet fait référence a mon bouton?
0
clem44nantes Messages postés 14 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 20 mai 2009
19 mai 2009 à 18:17
voila ce que j'ai mis :

 public void button1_Click(object sender, EventArgs e)
        {
             if (form1.button1 != null)
            {
                form1.button1.Visible = false;
            }
       
        }
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
19 mai 2009 à 18:20
Bah oui, mais dans ton cas c'est pas button1 qui est null, c'est autre chose (mais cependant, ton if est bien placé) ;)

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
clem44nantes Messages postés 14 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 20 mai 2009
19 mai 2009 à 21:07
je croie que je désespère, j'ai fais un débogage et pourtant tout est créer correctement
0
clem44nantes Messages postés 14 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 20 mai 2009
19 mai 2009 à 22:58
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CUsers%5Ccl3m%5CAppData%5CLocal%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" />
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]-->
<style>
<!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
@page Section1
{size:595.3pt 841.9pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;
mso-header-margin:35.4pt;
mso-footer-margin:35.4pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tableau Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
form1 :



 





private

void btnform1_Click(object sender, EventArgs
e)






        {






           
Form2 form2 = newForm2();






           
form2.Show();






       

}






 






form2 :






 






private

void btnform2_Click(object sender, EventArgs
e)






        {






           
Form3 form3 = newForm3(this);






           

form3.Show();






 







 






form3 :






 






public

partial
class
Form3 : Form






    {






       
public
Form2
form2;






       
public
Form1
form1;






       
public Form3(Form1
F1)






        {






           








            form1
= F1;






           
InitializeComponent();






        }






       
public Form3(Form2
F2)






        {






            form2
= F2;






           
InitializeComponent();






        }






 







       
private
void
btnform3_Click(object sender, EventArgs e)






        {






           

if
(form1.btnform1
!=null)






            {






  
         form1.btnform1.Visible = false;-->
La référence d'objet n'est pas
définie à une instance d'un objet.






            }






        }






    }
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
20 mai 2009 à 10:25
Tu ne me semble pas avoir beaucoup cherché, surtout quand je te dis que dans "form1.btnform1.Visible", ce n'est pas btnform1 qui est null...

"tout est créer correctement"
Créé correctement, oui, mais pas référencé partout.

Bon, je vais faire simple :

si tu mets un "." (un point) après un objet qui est null, il y a une erreur.

Tu pensais que c'est form1.btnform1 qui était null, et c'est là où tu te trompes.
D'ailleurs, lorsque tu crées un form1, la méthode InitializeComponent() de cette form est appelée (dans le constructeur), donc selon toute vraisemblance, btnform1 est créé, donc n'est pas null.

Ton problème vient tout simplement du fait que c'est form1 qui est null !!!
Et c'est logique : si tu crées ta form3 depuis ta form2, le membre form1 de ta form3 n'est pas initialisé, et donc est null.

Et puisque tu ne crées ta form3 que depuis ta form1 OU ta form2, l'un des deux sera toujours null, et l'autre non.

if(form1 != null)
{
form1.btnform1.Visible = false;
}
else if(form2 != null)
{
form2.btnform2.Visible = false;
}
else
{
// Normalement, tu ne devrais jamais arriver ici.
}

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
clem44nantes Messages postés 14 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 20 mai 2009
20 mai 2009 à 11:07
en faisant ce que tu as mis j'arrive dans le dernier sinon, je peux faire comment^pour initailisé mon form1 dans le form3?


merci
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
20 mai 2009 à 11:35
Si tu arrives dans le dernier else, c'est que tu as créé ta Form3 comme ça

- Form3 form3 = new Form3(null);
ou
- Form3 form3 = new Form3(); // si tu as le constructeur correspondant

au lieu de
- Form3 form3 = new Form3(this);

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
clem44nantes Messages postés 14 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 20 mai 2009
20 mai 2009 à 11:45
ok, donc maintenant j'arrive dans mon 1er sinon si qui cache le bouton du form2 donc form2 est bien initialisé, j'ai fais pareil pour le form 1 mais il est toujours null.
0
clem44nantes Messages postés 14 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 20 mai 2009
20 mai 2009 à 14:05
je voudrais savoir en derniere question si il serait possible a partir d'un bouton de modifier le initialize component pour garder en mémoire la valeur visible d'un bouton soit true ou false.merci
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
20 mai 2009 à 14:09
Relis-toi s'il te plait, car c'est difficilement compréhensible.

Tu veux que quand tu crées une form2 depuis ta form1 et que tu crées une form3 depuis ta form2, en cliquant sur le bouton de la form3 ça cache le bouton de la form1 ?

Dans ce cas, il faut transmettre une référence de ta form1 lorsque tu crées ta form2, puis que tu passes cette référence lors de la création de ta form3.

Vu que c'est ce qu'on a fait depuis maintenant 2 pages de forum, tu devrais quand même être capable de te débrouiller pour faire ça seul.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
Rejoignez-nous