PictureBox

Résolu
aminegalai Messages postés 28 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 19 septembre 2009 - 26 mars 2009 à 23:09
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 8 avril 2009 à 20:19
j'ai 2 form, la 1ère est consacrée pour le menu et la deuxième pour mise à jours des factures

sur la 1ère form il y a des picturebox lorsque je veux appeler la 2ème form je dois mettre la propriété du picturebox (visible=false) voila le code:
 private void menu_facture_Click(........)
{
pic.visible=false;
...............
frm2 facture = new frm2();
facture.show();
}

mais lorsque je ferme la form facture et je reviens au menu comment on peut mettre le picturebox (pic) à visible

merci

19 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
8 avril 2009 à 20:19
Il faut remplacer form2.FormClosed += new EventHandler (form2_Closed); par form2.FormClosed + = new FormClosedEventHandler(form2_Closed);

Si tu avais tapé toi-même le code, plutôt que de faire du copier coller, la deuxième partie de la ligne aurait été générée toute seule...

Krimog :
while (!(succeed = try())) ;
3
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
27 mars 2009 à 04:50
Salut,

Utilise l'evenement FormClosed de ta form2
0
aminegalai Messages postés 28 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 19 septembre 2009
27 mars 2009 à 06:49
merci j'ai essayé avec formclosed avant de poser cette question mais je sais pas comment atteindre le contrôle "pic" dans le code de la form2
merciiiiiiiiiiiiii
0
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
27 mars 2009 à 09:23
Non, tu dois t'abonner à l'évènement FormClosed depuis ta form1

 private void menu_facture_Click(........)
{
pic.visible=false;
...............
frm2 facture = new frm2();
facture.FormClosed+=new EventHandler(methodeAAppelerApresFermeture);
facture.show();
}

private methodeAAppelerApresFermeture(object sender, EventArgs e)
{
pic.Visible=true;
}

Tu peux aussi utiliser une méthode anonyme si tu sais t'en servir
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
27 mars 2009 à 10:13
Sinon, il y a encore plus simple : bloquer la form1 tant que la form2 est ouverte via ShowDialog() à la place de Show()

pic.Visible = false;
frm2 facture = new frm2();
facture.ShowDialog();
pic.Visible = true;

En revanche, ne fais ça que si tu ne souhaites pas pouvoir accéder à ton menu tant que la facture est ouverte. Sinon, utilise le code de WishhhMaster

Krimog :
while (!succeed = try()) ;
0
aminegalai Messages postés 28 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 19 septembre 2009
28 mars 2009 à 08:48
Merci mais encore impose des problème.
est-il possible de savoir comment déclarer une variable global qu'on peut l'accéder de n'importe qu'elle code source de n'importe form (et syntaxe svp)  :
si c'est possible donc je déclare une variable global pour tout le projet et on teste sur cette variable dans le formClosed
------------------------------------------
namespace NomProjet
{
    // on déclare ici ou quoi ??????????????????????????
    public partial class frm : Form
    {
----------------------------------
ou une méthode pour accéder à une contrôle située dans la form1 à partir du code source de la form2
merci pour vos aide
0
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
28 mars 2009 à 10:19
En C# une variable appartient obligatoirement à une classe.
Je n'ai pas trop compris ce que tu voulais en faire.

Si tu veux vraiment accéder à ta pictureBox de ta form1 depuis ta form2, alors fais toi une propriété

//dans form1

public PictureBox MaPictureBox
{
  get{return pic; }
}

Je pense qu'utiliser un évènement ou rendre form2 bloquante est quand même plus propre.
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
28 mars 2009 à 14:06
Je n'ai pas non plus parfaitement compris ce que tu voulais faire, mais je suis parfaitement d'accord avec WishhhMaster. Les événements sont là pour être utilisés.

Les variables globales n'existent pas en C#, puisque rien ne peut exister en dehors d'une classe. Cependant, tu peux créer une variable de classe (mot clé "static") qui pourra aboutir à un résultat similaire :

public class MaClass
{
    public static int maVar;
}

public class MaClass2
{
    private void MaProcedure()
    {
        MaClass.maVar = 5;
    }
}

Enfin là évidemment, c'est extrêmement résumé. Il faut bien sûr utiliser des propriétés, et non pas la variable directement. Cependant, il ne faut pas utiliser des variables static parce que ça t'arrange, mais parce que c'est cohérent de l'utiliser dans tel ou tel cas. Si tu mises trop sur les variables statiques (ou méthodes statiques), ton programme sera illisible et tu perds tout l'intérêt des classes.

Krimog :
while (!succeed = try()) ;
0
aminegalai Messages postés 28 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 19 septembre 2009
29 mars 2009 à 00:21
Salut



Krimog
est ce que vous pouvez expliquer de plus comment utilisé cette instruction:






while (!succeed = try()) ;







dans quel méthode et qu'elle est l'objectif de la mettre?????

merciii
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
29 mars 2009 à 13:46
Euh... Il s'agit juste de ma signature.
Ca vaut juste dire "tant que ça ne marche pas, tu réessaies", c'est plus un état d'esprit qu'un bout de code à utiliser :p

Krimog :
while (!succeed = try()) ;
0
aminegalai Messages postés 28 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 19 septembre 2009
2 avril 2009 à 07:29
bonjours :D:D:D

je suis débutant en C#, j'ai crée 2 form la 1ère pour le menu (de type mdi)
et la 2ème form est consacrée pour la gestion des facture

j'ai mis sur la form menu une picture box.
le problème c'est lorsque je veux appelé  la form facture je mettre la propriété du picture box à visible =false et lorsque je ferme la form je veux atteindre la propriété visible à true

j'ai essayé par formClosed ------>ne marche pas

j'ai essayé avec ce code ça marche mais lorsque je mis la form menu de type mdi il impose un problème

--------------------------------
public void TraitementForm1()
{
picturebox1.visible=true;
}

public void OuvertureForm2()
{

MaForm2 maForm2 = new MaForm2();
maForm2.Owner = this;
maForm2.Show();
}

//Dans MaForm2

private void ButtonOk_Click(object sender, System.EventArgs e)
{
MaForm1 maForm1 = (MaForm1)this.Owner;
maForm1.TraitementForm1();
}
...
Remarque :
j'ai transformé ce code selon mon besoin et ca marche mais problème avec la form mdi..............
----------------------------------------------------------comment atteindre tout simplement une form menu de type mdi quant trouve sur eu une picturebox et lorsque je fais l'appelle à la 2ém form le picture box devienne visible false et si je ferme la 2ème form le picture box devient visibletrue càd l'image devient visible??????????????
merciiiiii:D:D:D:D:cry:
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
2 avril 2009 à 10:19
"J'ai essayé par formClosed ------>ne marche pas"
Il n'y a pas de raison. Tu as bien vérifié qu'il allait dans la fonction ? Tu as eu une erreur ? Si oui, laquelle ?

"j'ai transformé ce code selon mon besoin et ca marche mais problème avec la form mdi"
Si tu ne nous dit pas quel est le problème, on va avoir du mal à t'aider.

Krimog :
while (!succeed = try()) ;
0
aminegalai Messages postés 28 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 19 septembre 2009
2 avril 2009 à 10:46
1-"J'ai essayé par formClosed ------>ne marche pas"

private void frm_f2_FormClosed(object sender, FormClosedEventArgs e)
        {

            frm_02_menu_principal g = new frm_02_menu_principal();
         g.pic.visible=true;
           
        }
       g.pic.visible=true --> cette instruction ne s'exécute pas il pointe sur lui mais pas de résultat

2--"j'ai transformé ce code selon mon besoin et ca marche mais problème avec la form mdi impose de problème "

le problème lorsque je fais l'appelle à la form 2 à partir du form menu
je fais
frm_2_facture f = new frm_2_facture();
f.mdiparent =this ; // pour qu'elle devient mdi
// et j'utilise ces 2 instruction il impose des problème
maForm2.Owner = this;
maForm2.Show();
et dans l'autre form "formClosed"
MaForm1 maForm1 = (MaForm1)this.Owner;
maForm1.TraitementForm1();
 mon but est de faire dans la form mdi "menu" des images raccourcis comme le windows on trouve des icone raccourcis comme "mes documents" par exemple mais mon problème si je ne mettre pas ces picture box à visible =false les icone s'affichent sur la 2ème form et si je les met à visible =false et lorsque je ferme le form 2 et je reviens au menu les icones reste caché
comment faire svp
merciiiiii
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
2 avril 2009 à 11:20
private void frm_f2_FormClosed(object sender, FormClosedEventArgs e)
        {

            frm_02_menu_principal g = new frm_02_menu_principal();
         g.pic.visible=true;
           
        }
       g.pic.visible=true --> cette instruction ne s'exécute pas il pointe sur lui mais pas de résultat
Sisi, elle s'exécute. Mais pas sur la bonne fenêtre !

Je résume ce que fait ton code. Quand tu fermes frm_f2, tu crées une nouvelle frm_02_menu_principal (que tu n'affiche pas), puis tu lui dis qu'à l'intérieur de cette nouvelle fenêtre, tu veux afficher pic (mais la fenêtre est cachée, hein).
Donc déjà, la ligne " frm_02_menu_principal g new frm_02_menu_principal();", il faut l'effacer, tu n'as pas à créer d'objet. Et dans ta deuxième ligne, il faut remplacer "g" par une référence à ta fenêtre contenant pic. Probablement "this".>

private void frm_f2_FormClosed(object sender, FormClosedEventArgs e)

        {

         this.pic.visible=true;

  }

Krimog :
while (!succeed = try()) ;
0
aminegalai Messages postés 28 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 19 septembre 2009
3 avril 2009 à 07:59
bonjour
si je je met comme vous avez dis :
-------------------------------------------------------
private void frm_f2_FormClosed(object sender, FormClosedEventArgs e)
        {
         this.pic.visible=true;
  }
this---> retourne la form 2 pas la form 1 pour mettre this
-------------------------------------------------------

j'ai trouvé la solution qui vous donnes la solution de mettre la picture box à true et à false (visible)
I-voila les étapes:
1- créer une form 1 ajouter un menu sur la form, une picture box
2- créer la form 2
II-voila le code :
1- dans la form 1 et après remplir le contrôle du menu

       private void factureToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Owner=this;
            pictureBox1.Visible = false;
            f2.Show();
        }
2-on crée une méthode  dans le code de la form 1 qui a pour but de mettre la picture box à false

public void Pctvisible()
        {
            pictureBox1.Visible = true ;
        }

3- sur la form 2 et avec FormClosed on fait l'accès à la méthode PctVisible de la form 1:

       private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            Form1 f1 = (Form1)this.Owner;
            f1.Pctvisible();      
        }
ces codes vous permet de résoudre la propriété visible (true et false) de la picture box mais mon problème si je met la form1 à type Mdi n'accepte pas.
l'instruction ----->f2.MdiParent=this;
dans factureToolStripMenuItem_Click
l'erreur sur
            Form1 f1 = (Form1)this.Owner;

            f1.Pctvisible();   
Question :
Comment faire pour créer la première form de type Mdi qui se trouve sur lui une picture box et au même temps lorsque j'ouvre la form 2 la picture box devient false (c'est simple et résolu) et sur tout lorsque je ferme mon form 2 le picture box devient visible = true ?
 voila mon problème tout simplement
merciiiii

Amine Galaï
/*
j=2;
for (i=0; i <j ; i++)
{
Console.WriteLine("Merciiiiiii");
j=i+1;
}

*/
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
3 avril 2009 à 10:39
"Et dans ta deuxième ligne, il faut remplacer "g" par une référence à ta fenêtre contenant pic. Probablement "this"."
"this---> retourne la form 2 pas la form 1 pour mettre this"
J'ai dit "Probablement".

Le plus simple est encore de mettre la méthode "private void frm_f2_FormClosed(object sender, FormClosedEventArgs e)" dans ta form1, et non dans ta form 2.

(tout le code ici doit être dans ta form1)

private void form1_bouton_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.FormClosed += new machin (form2_Closed);
    pic.Visible = false;
    form2.Show();
}

private void form2_Closed(object s, EventArgs e)
{
    pic.Visible = true;
}

Krimog :
while (!succeed = try()) ;
0
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
3 avril 2009 à 10:44
En gros c'est ce que je lui ai dit il y a 4 jours :s
Bon courage avec lui.
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
3 avril 2009 à 11:41
Oui, j'ai juste utilisé ce code (qui est effectivement identique au tien) pour accompagner mon explication

Krimog :
while (!succeed = try()) ;
0
aminegalai Messages postés 28 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 19 septembre 2009
8 avril 2009 à 19:29
salut;
lorsque j'utilise ce code il impose une erreur la voila :
le code :
-------------------------------------------------------------
private void form1_bouton_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.FormClosed += new EventHandler (form2_Closed);
    pic.Visible = false;
    form2.Show();
}

private void form2_Closed(object s, EventArgs e)
{
    pic.Visible = true;
}
----------------------------------------------
Erreur    1    Impossible de convertir implicitement le type 'System.EventHandler' en 'System.Windows.Forms.FormClosedEventHandler'  

comment on peut la résoudre svp????????????????????
merciii

Amine Galaï
/*
j=2;
for (i=0; i <j ; i++)
{
Console.WriteLine("Merciiiiiii");
j=i+1;
}
*/
0
Rejoignez-nous