Copier image panel c#

pg00753k Messages postés 1 Date d'inscription lundi 5 mars 2012 Statut Membre Dernière intervention 14 mars 2012 - 14 mars 2012 à 17:09
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 14 mars 2012 à 21:13
alors j essai de m expliquer correctement je fais un logiciel de dessin en c# je veux y integrer une fonction copier coller elle ne fonctionne pas correctement l evenement click je crée un rectangle avec le mouse down et mouse up pour selectionner la zone a copier et au click de coller j ajoute cette image a une liste qui est dessiner dans l evenement paint de mon panel voila je copie mon code entier..
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace _1._2._3.Peinture____
{
    public partial class Principale : Form
    {

// INITIALISATIONS

        // IMAGES
        Bitmap cocher = new Bitmap(@"C:\Users\peillon\Documents\iut\ptut\1. 2. 3. Peinture !!!\Icone\valider.png");
        Bitmap image, image2;//pour enregistrer/ouvrir
        Bitmap zéro;//image origine vierge
        Bitmap im_copier;

        //RECTANGLES
        bool rectangle = false;//vrai si on trace un rectagle

        //VIDE
        public struct Rectangle_couleur_epaisseur// on crée une structure pour avoir un rectagle complet (rect+couleur+epaisseur)
        {
            public Rectangle Rect;
            public Pen Pen;

            public Rectangle_couleur_epaisseur(Rectangle rect, Color color, decimal ep)
            {
                Rect = rect;
                float epp = (float)ep;
                Pen = new Pen(color, epp);
            }
        }
        List<Rectangle_couleur_epaisseur> listeRectangle_couleur_epaisseur = new List<Rectangle_couleur_epaisseur>(); // un tableau de rectangle complet
        Rectangle recTempo = new Rectangle();   // un rectangle temporaire

        //PLEIN
        public struct Rectangle_couleur_epaisseur_plein// on crée une structure pour avoir un rectagle complet (rect+couleur+epaisseur)
        {
            public Rectangle Rect_plein;
            public SolidBrush Pen_plein;

            public Rectangle_couleur_epaisseur_plein(Rectangle rect_plein, Color color)
            {
                Rect_plein = rect_plein;
                Pen_plein = new SolidBrush(color);
            }
        }
        List<Rectangle_couleur_epaisseur_plein> listeRectangle_couleur_epaisseur_plein = new List<Rectangle_couleur_epaisseur_plein>(); // un tableau de rectangle plein
        Rectangle recTempo_plein = new Rectangle();   // un rectangle plein temporaire


        //OVALE
        bool ovale = false;//vrai si on trace un rectagle

        //VIDE
        public struct Ovale_couleur_epaisseur// on crée une structure pour avoir un rectagle contenant l ovale complet (rect+couleur+epaisseur)
        {
            public Rectangle Rect;
            public Pen Pen;

            public Ovale_couleur_epaisseur(Rectangle rect, Color color, decimal ep)
            {
                Rect = rect;
                float epp = (float)ep;
                Pen = new Pen(color, epp);
            }
        }
        List<Ovale_couleur_epaisseur> listeOvale_couleur_epaisseur = new List<Ovale_couleur_epaisseur>(); // un tableau de rectangle contenant les ovales complet
        Rectangle ovaTempo = new Rectangle();   // un rectangle contenant l ovale temporaire

        //PLEIN
        public struct Ovale_couleur_epaisseur_plein// on crée une structure pour avoir un rectagle contenant l ovale complet (rect+couleur+epaisseur)
        {
            public Rectangle Rect_plein;
            public SolidBrush Pen_plein;

            public Ovale_couleur_epaisseur_plein(Rectangle rect_plein, Color color)
            {
                Rect_plein = rect_plein;
                Pen_plein = new SolidBrush(color);
            }
        }
        List<Ovale_couleur_epaisseur_plein> listeOvale_couleur_epaisseur_plein = new List<Ovale_couleur_epaisseur_plein>(); // un tableau de rectangle contenant l ovale plein
        Rectangle ovaTempo_plein = new Rectangle();   // un rectangle contenant l'ovale plein temporaire


        //LIGNE
        bool ligne = true;//vrai si on trace une ligne
        Point début; // 2 points pour une ligne
        Point arrivé;

        public List<Line> listeligne = new List<Line>();// une liste de ligne à vrai car outil par defaut

        public struct Line// on crée une structure pour avoir une ligne complete complet (ligne+couleur+epaisseur)
        {
            public Point Start;
            public Point End;
            public Pen Pen;

            public Line(Point start, Point end, Color couleur, decimal ep)
            {
                Start = start;
                End = end;
                float epp = (float)ep;
                Pen = new Pen(couleur, epp);
            }
        }


        //FIGURE LIBRE
        bool figurelib = false;// vrai si on trace une figure libre 
        List<Line> listelignelib = new List<Line>();// une liste de ligne
        List listepointslib = new List();// une liste de point
        Point débutlib, arrivélib, inter1, p, p1;//points necessaire
        int n = 0;//increment dans la liste de ligne

        //POLYGONE

        bool polygone = false;// vrai si on trace un polygone
        
        //VIDE
        public struct Polygone_couleur_epaisseur// on crée une structure pour avoir un polygone complet (poly+couleur+epaisseur)
        {
            public List Listep;
            public Pen Pen;

            public Polygone_couleur_epaisseur(List listep, Color color, decimal ep)
            {
                float epp = (float)ep;
                Pen = new Pen(color, epp);
                Listep = new List(listep);
            }
        }
        Point pointinsere;// un point à ajouter dans la liste
        public List listedepoint = new List();// une liste de points
        public List listedepoly = new List();// une liste de polygone


        //PLEIN
        public struct Polygone_couleur_epaisseur_plein// on crée une structure pour avoir un polygone complet plein (poly+couleur+epaisseur)
        {
            public List Listep_p;
            public SolidBrush Pen_plein;

            public Polygone_couleur_epaisseur_plein(List listep, Color color)
            {
                Pen_plein = new SolidBrush(color);
                Listep_p = new List(listep);
            }
        }
        public List listedepolyplein = new List();// une liste de polygone plein

        //GOMME
        bool gomme = false;// vrai si on trace une figure libre 
        List<Line> listelignelibg = new List<Line>();// une liste de ligne
        List listepointslibg = new List();// une liste de point
        Point débutlibg, arrivélibg, inter1g, pg, p1g;//points necessaire
        int ng = 0;//increment dans la liste de ligne

        //SELECTION
        bool selection = false;// vrai si on selectionne
        Rectangle rectselect;// le rectangle servant a definir le contour
        

        //TEXTE
        bool textet = false;// vrai si on ecrit
        Point emplacement;//emplacement du texte
        Label texte = new Label();//cree une zone de texte artificiel
        Color couleurtexte;// couleur du texte
        List<texte_complet> liste = new List<texte_complet>();// liste de texte_complet
        public struct texte_complet// on crée une structure pour avoir un texte complet (texte+font+location)
        {
            public string Texte;// texte a afficher
            public Point Location;//position du texte a dessiner
            public Font Font;//typographie
            public Color Couleur;//couleur

            public texte_complet(string texte, Font font, Color couleur, Point location)
            {
                Texte = texte;
                Font = font;
                Location = location;
                Couleur = couleur;

            }
        }


        // COPIER COLLER
        bool copier = false;//si on copie
        bool coller = false;//si on colle
        List listeimagecoller = new List();// liste des images a coller
        public struct image_largeur_hauteur// on crée une structure pour avoir une image complete (bitmap+hauteur+largeur)
        {
            public Bitmap Imagec;
            public int Hauteur;
            public int Largeur;
            public Point Locationacoller;//position de l image a dessiner

            public image_largeur_hauteur(Bitmap image, Point locationacoller, int largeur, int hauteur)
            {
                Imagec =image;
                Hauteur=hauteur;
                Largeur=largeur;
                Locationacoller=locationacoller;

            }
        }

        //BOOL DE CONDITION
        bool enregistrer1fois = false; // si c'est deja enregistrer
        bool ouvert = false; // si on ouvre une image
        bool tempo = false;// vrai si temporaire
        bool plein = false;// vrai si figure pleine

        //INFORMATION A RECUPERER
        Color couleur;// couleur à recuperer
        decimal epais = 0;// epaisseur à recuperer

        //TRACAGE TEMPORAIRE
        Pen stylotempo = new Pen(Color.Red, 3); // couleur et epaisseur du trait en pixel
        SolidBrush pinceautempo = new SolidBrush(Color.Red);// couleur de la figure
    



        // INITIALISATION DE LA FORME
        public Principale()
        {
            InitializeComponent();
        }


        //FERMETURE DE LA FENETRE
        private void Principale_FormClosed(object sender, FormClosedEventArgs e)// si la fenetre est fermee
        {
            Application.Exit(); // ferme l'application et donc la fenetre demarrage et ferme donc par l intermediaire de demarrage_closed
        }

        //CHANGEMENT TAILLE ZONE DE DESSIN
        private void zone_dessin_Resize(object sender, EventArgs e)// changement de taille de la zone de dessin
        {
            Refresh();// on reactualise la zone
        }


        // RESPONSABLE DESSIN
        private void zone_dessin_MouseDown(object sender, MouseEventArgs e)// on appuie sur le bouton de la sourie sur la zone de dessin
        {
            tempo = true;//temporaire est vrai

            //SELECTION
            if (selection)
            {
                rectselect = new Rectangle(e.X, e.Y, 0, 0);
            }

            //RECTANGLE
            if (rectangle)// si on fait un rectangle
            {
                if (plein == false) // si on le veut vide
                {
                    recTempo = new Rectangle(e.X, e.Y, 0, 0); // crée un rectangle temporaire d hauteur et largeur nulles
                }
                else // si on le veut plein
                {
                    recTempo_plein = new Rectangle(e.X, e.Y, 0, 0); // crée un rectangle temporaire d hauteur et largeur nulles
                }
            }

            //OVALE
            if (ovale)// si on fait un ovale
            {
                if (plein == false) // si on le veut vide
                {
                    ovaTempo = new Rectangle(e.X, e.Y, 0, 0); // crée un rectangle contenant l ovale temporaire d hauteur et largeur nulles
                }
                else // si on le veut plein
                {
                    ovaTempo_plein = new Rectangle(e.X, e.Y, 0, 0); // crée un rectangle contenant l ovale temporaire d hauteur et largeur nulles
                }
            }

            //LIGNE
            if (ligne)
            {
                début.X = e.X;// le point de depart prend les coordonnées du curseur
                début.Y = e.Y;
            }

            //FIGURE LIBRE
            if (figurelib)
            {
                débutlib.X = e.X; // debut prend les caracteristique du curseurs
                débutlib.Y = e.Y;
                listepointslib.Add(débutlib); // ajoute ce point a la liste de points
            }

            //GOMME
            if (gomme)
            {
                débutlibg.X = e.X; // debut prend les caracteristique du curseurs
                débutlibg.Y = e.Y;
                listepointslibg.Add(débutlibg); // ajoute ce point a la liste de points
            }
        }

        private void zone_dessin_MouseMove(object sender, MouseEventArgs e)// on tient enfonce le bouton de la sourie sur la zone de dessin
        {
            if(tempo)
            {


            //SELECTION
                if (selection)
                {
                    rectselect.Width = e.X - rectselect.X; // change les caracteristiques du rectangle d hauteur et largeur
                    rectselect.Height = e.Y - rectselect.Y;
                }

            //RECTANGLE
            if (rectangle)//si on fait un rectangle
            {
                if (plein == false) // si on le veut vide
                {
                    recTempo.Width = e.X - recTempo.X; // change les caracteristiques du rectangle d hauteur et largeur
                    recTempo.Height = e.Y - recTempo.Y;
                }
                else// si on le veut plein
                {
                    recTempo_plein.Width = e.X - recTempo_plein.X; // change les caracteristiques du rectangle d hauteur et largeur
                    recTempo_plein.Height = e.Y - recTempo_plein.Y;
                }
            }

            //OVALE
            if (ovale)//si on fait un ovale
            {
                if (plein == false) // si on le veut vide
                {
                    ovaTempo.Width = e.X - ovaTempo.X; // change les caracteristiques du rectangle contenant l ovale d hauteur et largeur
                    ovaTempo.Height = e.Y - ovaTempo.Y;
                }
                else// si on le veut plein
                {
                    ovaTempo_plein.Width = e.X - ovaTempo_plein.X; // change les caracteristiques du rectangle contenant l ovale d hauteur et largeur
                    ovaTempo_plein.Height = e.Y - ovaTempo_plein.Y;
                }
            }

            //LIGNE
            if (ligne)
            {
                arrivé.X = e.X;// le point d arrive prend les coordonnées du curseur
                arrivé.Y = e.Y;
            }

            //FIGURE LIBRE
            if (figurelib)
            {
                inter1.X = e.X; // le point inter1 prend les caracteristiques du curseur
                inter1.Y = e.Y;
                listepointslib.Add(inter1);// ajoute a la liste de points
                n = n + 1;// increment de l index de la liste de points
            }

            //GOMME
            if (gomme)
            {
                inter1g.X = e.X; // le point inter1 prend les caracteristiques du curseur
                inter1g.Y = e.Y;
                listepointslibg.Add(inter1g);// ajoute a la liste de points
                ng = ng + 1;// increment de l index de la liste de points
            }
            Refresh();//raffraichit l'image
            }
            
        }

        private void zone_dessin_MouseUp(object sender, MouseEventArgs e)// on relache le bouton de la sourie sur la zone de dessin
        {
            if (polygone == false)//si on fait pas de polygone sinn tempo=false sur double clique
            {
                tempo = false;// temporaire est faux
            }

            //COPIER COLLER
            if (coller)
            {
                listeimagecoller.Add(new image_largeur_hauteur(im_copier,new Point(e.X,e.Y), im_copier.Width,im_copier.Height));
            }

            //SELECTION
            if (selection)
            {
                rectselect.Width = e.X - rectselect.X; // change les caracteristiques du rectangle d hauteur et largeur
                rectselect.Height = e.Y - rectselect.Y;
                if (copier)// si on fait un copier
                {
                    selection = false;//on selection une seul fois
                }
            }

            //RECTANGLE
            if (rectangle)// si on fait un rectangle
            {
                if (plein)//si on le veut plein
                {
                    if (couleur != Color.Empty)// si une couleur est choisit
                    {
                        listeRectangle_couleur_epaisseur_plein.Add(new Rectangle_couleur_epaisseur_plein(recTempo_plein,couleur));//ajoute un rectangle a la liste 
                    }
                    else//sinon
                    {
                        MessageBox.Show("veuillez choisir une couleur");// on affiche un message demandant de selectionner une couleur
                        colorDialog1.ShowDialog();// affiche la palette
                        couleur = colorDialog1.Color;// couleur prend la valeur choisit
                        listeRectangle_couleur_epaisseur_plein.Add(new Rectangle_couleur_epaisseur_plein(recTempo_plein, couleur));//ajoute un rectangle a la liste 
                    }
                }
                else
                {
                    if (couleur != Color.Empty)// si une couleur est choisit
                    {
                        if (epais != 0)// si epaisseur choisit
                        {
                            listeRectangle_couleur_epaisseur.Add(new Rectangle_couleur_epaisseur(recTempo, couleur,epais));//ajoute un rectangle a la liste 
                        }
                        else//sinon
                        {
                            Epaisseur fenetre = new Epaisseur();// on crée une fenetre epaisseur
                            fenetre.ShowDialog();// on laffiche
                            epais = fenetre.numericUpDown1.Value;// apais prend la valeur choisit
                            listeRectangle_couleur_epaisseur.Add(new Rectangle_couleur_epaisseur(recTempo, couleur,epais));//ajoute un rectangle a la liste 
                        }
                    }
                    else
                    {
                        if (epais != 0)
                        {
                            MessageBox.Show("veuillez choisir une couleur");// on affiche un message demandant de selectionner une couleur
                            colorDialog1.ShowDialog();// affiche la palette
                            couleur = colorDialog1.Color;// couleur prend la valeur choisit
                            listeRectangle_couleur_epaisseur.Add(new Rectangle_couleur_epaisseur(recTempo, couleur,epais));//ajoute un rectangle a la liste
                        }
                        else
                        {
                            Epaisseur fenetre = new Epaisseur();// on crée une fenetre epaisseur
                            fenetre.ShowDialog();// on laffiche
                            epais = fenetre.numericUpDown1.Value;// apais prend la valeur choisit
                            MessageBox.Show("veuillez choisir une couleur");// on affiche un message demandant de selectionner une couleur
                            colorDialog1.ShowDialog();// affiche la palette
                            couleur = colorDialog1.Color;// couleur prend la valeur choisit
                            listeRectangle_couleur_epaisseur.Add(new Rectangle_couleur_epaisseur(recTempo, couleur,epais));//ajoute un rectangle a la liste
                        }
                    }
                }
            }


            //OVALE
            if (ovale)// si on fait un ovale
            {
                if (plein)//si on le veut plein
                {
                    if (couleur != Color.Empty)// si une couleur est choisit
                    {
                        listeOvale_couleur_epaisseur_plein.Add(new Ovale_couleur_epaisseur_plein(ovaTempo_plein, couleur));//ajoute un ovale a la liste 
                    }
                    else//sinon
                    {
                        MessageBox.Show("veuillez choisir une couleur");// on affiche un message demandant de selectionner une couleur
                        colorDialog1.ShowDialog();// affiche la palette
                        couleur = colorDialog1.Color;// couleur prend la valeur choisit
                        listeOvale_couleur_epaisseur_plein.Add(new Ovale_couleur_epaisseur_plein(ovaTempo_plein, couleur));//ajoute un ovale a la liste 
                    }
                }
                else
                {
                    if (couleur != Color.Empty)// si une couleur est choisit
                    {
                        if (epais != 0)// si epaisseur choisit
                        {
                            listeOvale_couleur_epaisseur.Add(new Ovale_couleur_epaisseur(ovaTempo, couleur, epais));//ajoute un ovale a la liste 
                        }
                        else//sinon
                        {
                            Epaisseur fenetre = new Epaisseur();// on crée une fenetre epaisseur
                            fenetre.ShowDialog();// on laffiche
                            epais = fenetre.numericUpDown1.Value;// apais prend la valeur choisit
                            listeOvale_couleur_epaisseur.Add(new Ovale_couleur_epaisseur(ovaTempo, couleur, epais));//ajoute un rectangle a la liste 
                        }
                    }
                    else
                    {
                        if (epais != 0)
                        {
                            MessageBox.Show("veuillez choisir une couleur");// on affiche un message demandant de selectionner une couleur
                            colorDialog1.ShowDialog();// affiche la palette
                            couleur = colorDialog1.Color;// couleur prend la valeur choisit
                            listeOvale_couleur_epaisseur.Add(new Ovale_couleur_epaisseur(ovaTempo, couleur, epais));//ajoute un rectangle a la liste
                        }
                        else
                        {
                            Epaisseur fenetre = new Epaisseur();// on crée une fenetre epaisseur
                            fenetre.ShowDialog();// on laffiche
                            epais = fenetre.numericUpDown1.Value;// apais prend la valeur choisit
                            MessageBox.Show("veuillez choisir une couleur");// on affiche un message demandant de selectionner une couleur
                            colorDialog1.ShowDialog();// affiche la palette
                            couleur = colorDialog1.Color;// couleur prend la valeur choisit
                            listeOvale_couleur_epaisseur.Add(new Ovale_couleur_epaisseur(ovaTempo, couleur, epais));//ajoute un rectangle a la liste
                        }
                    }
                }
            }

            //LIGNE
            if (ligne)
            {
                if (couleur != Color.Empty)// si une couleur est choisit
                {
                    if (epais != 0)// si une epaisseur est choisit
                    {
                            arrivé.X = e.X;// le point d'arrivé prend les coordonée du curseur
                            arrivé.Y = e.Y;
                            listeligne.Add(new Line(début, arrivé,couleur,epais));// on ajoute la ligne a la liste
                    }
                    else//sinon
                    {
                        Epaisseur fenetre = new Epaisseur();// on crée une fenetre epaisseur
                        fenetre.ShowDialog();// on laffiche
                        epais = fenetre.numericUpDown1.Value;// epais prend la valeur choisit
                        arrivé.X = e.X;// le point d'arrivé prend les coordonée du curseur
                        arrivé.Y = e.Y;
                        listeligne.Add(new Line(début, arrivé, couleur, epais));// on ajoute la ligne a la liste
                    }
                }

                else// sinon
                {
                    if (epais != 0)// si epaisseur choisit
                    {
                        MessageBox.Show("veuillez choisir une couleur");// on affiche un message demandant de selectionner une couleur
                        colorDialog1.ShowDialog();// affiche la palette
                        couleur = colorDialog1.Color;// couleur prend la valeur choisit
                        arrivé.X = e.X;// le point d'arrivé prend les coordonée du curseur
                        arrivé.Y = e.Y;
                        listeligne.Add(new Line(début, arrivé, couleur, epais));// on ajoute la ligne a la liste
                    }
                    else//sinon
                    {
                        Epaisseur fenetre = new Epaisseur();// on crée une fenetre epaisseur
                        fenetre.ShowDialog();// on laffiche
                        epais = fenetre.numericUpDown1.Value;// apais prend la valeur choisit
                        MessageBox.Show("veuillez choisir une couleur");// on affiche un message demandant de selectionner une couleur
                        colorDialog1.ShowDialog();// affiche la palette
                        couleur = colorDialog1.Color;// couleur prend la valeur choisit
                        arrivé.X = e.X;// le point d'arrivé prend les coordonée du curseur
                        arrivé.Y = e.Y;
                        listeligne.Add(new Line(début, arrivé, couleur, epais));// on ajoute la ligne a la liste
                    }
                }
            }

            //FIGURE LIBRE
            if (figurelib)
            {
                if (couleur != Color.Empty)// si une couleur est choisit
                {
                    if (epais != 0)// si une epaisseur est choisit
                    {
                        arrivélib.X = e.X; // arrivé prend les caracteristiques du curseur
                        arrivélib.Y = e.Y;
                        listepointslib.Add(arrivélib);// ajoute a la liste de points
                        listepointslib.Clear();// remet la liste de points a zero
                        n = 0;//l increment de liste a zero
                        p = new Point(0, 0);// les points egalement
                        p1 = new Point(0, 0);
                    }
                    else//sinon
                    {
                        Epaisseur fenetre = new Epaisseur();// on crée une fenetre epaisseur
                        fenetre.ShowDialog();// on laffiche
                        epais = fenetre.numericUpDown1.Value;// epais prend la valeur choisit
                        arrivélib.X = e.X; // arrivé prend les caracteristiques du curseur
                        arrivélib.Y = e.Y;
                        listepointslib.Add(arrivélib);// ajoute a la liste de points
                        listepointslib.Clear();// remet la liste de points a zero
                        n = 0;//l increment de liste a zero
                        p = new Point(0, 0);// les points egalement
                        p1 = new Point(0, 0);
                    }
                }

                else// sinon
                {
                    if (epais != 0)// si epaisseur choisit
                    {
                        MessageBox.Show("veuillez choisir une couleur");// on affiche un message demandant de selectionner une couleur
                        colorDialog1.ShowDialog();// affiche la palette
                        couleur = colorDialog1.Color;// couleur prend la valeur choisit
                        arrivélib.X = e.X; // arrivé prend les caracteristiques du curseur
                        arrivélib.Y = e.Y;
                        listepointslib.Add(arrivélib);// ajoute a la liste de points
                        listepointslib.Clear();// remet la liste de points a zero
                        n = 0;//l increment de liste a zero
                        p = new Point(0, 0);// les points egalement
                        p1 = new Point(0, 0);
                    }
                    else//sinon
                    {
                        Epaisseur fenetre = new Epaisseur();// on crée une fenetre epaisseur
                        fenetre.ShowDialog();// on laffiche
                        epais = fenetre.numericUpDown1.Value;// apais prend la valeur choisit
                        MessageBox.Show("veuillez choisir une couleur");// on affiche un message demandant de selectionner une couleur
                        colorDialog1.ShowDialog();// affiche la palette
                        couleur = colorDialog1.Color;// couleur prend la valeur choisit
                        arrivélib.X = e.X; // arrivé prend les caracteristiques du curseur
                        arrivélib.Y = e.Y;
                        listepointslib.Add(arrivélib);// ajoute a la liste de points
                        listepointslib.Clear();// remet la liste de points a zero
                        n = 0;//l increment de liste a zero
                        p = new Point(0, 0);// les points egalement
                        p1 = new Point(0, 0);
                    }
                }
            }

            //GOMME
            if (gomme)
            {
                    if (epais != 0)// si une epaisseur est choisit
                    {
                        arrivélibg.X = e.X; // arrivé prend les caracteristiques du curseur
                        arrivélibg.Y = e.Y;
                        listepointslibg.Add(arrivélibg);// ajoute a la liste de points
                        listepointslibg.Clear();// remet la liste de points a zero
                        ng = 0;//l increment de liste a zero
                        pg = new Point(0, 0);// les points egalement
                        p1g = new Point(0, 0);
                    }
                    else//sinon
                    {
                        Epaisseur fenetre = new Epaisseur();// on crée une fenetre epaisseur
                        fenetre.ShowDialog();// on laffiche
                        epais = fenetre.numericUpDown1.Value;// epais prend la valeur choisit
                        arrivélibg.X = e.X; // arrivé prend les caracteristiques du curseur
                        arrivélibg.Y = e.Y;
                        listepointslibg.Add(arrivélibg);// ajoute a la liste de points
                        listepointslibg.Clear();// remet la liste de points a zero
                        ng = 0;//l increment de liste a zero
                        pg = new Point(0, 0);// les points egalement
                        p1g = new Point(0, 0);
                    }
                
            }
            Refresh();//raffraichit l'image
        }

        private void zone_dessin_Paint(object sender, PaintEventArgs e)// responsable du dessin
        {
            zone_dessin.Cursor = Cursors.Cross;// met une croix en tant que curseur pour dessiner
            zéro = new Bitmap(zone_dessin.Width, zone_dessin.Height);// crée une image vide


            // à l'ouverture image à ouvrir = image2

            if (image2 != null)//si elle est non nulle
            {
                e.Graphics.DrawImage(image2, 0, 0, zone_dessin.Width, zone_dessin.Height);//dessiner l'image
            }

            //COLLER
                if (listeimagecoller.Count > 0)//si elle est non nulle
                {
                    foreach (image_largeur_hauteur im in listeimagecoller)
                    {
                        e.Graphics.DrawImage(im.Imagec, new Rectangle(im.Locationacoller, new Size(im.Largeur, im.Hauteur)));
                    }
                
                }



            //ouverture image

            if (ouvert == true) //si on ouvre une nouvelle image on vide les listes
            {
                listeOvale_couleur_epaisseur.Clear();// on reinitialise tout
                listeOvale_couleur_epaisseur_plein.Clear();
                listeRectangle_couleur_epaisseur.Clear();
                listeRectangle_couleur_epaisseur_plein.Clear();
                listedepoint.Clear();
                listedepoly.Clear();
                listedepolyplein.Clear();
                listepointslib.Clear();
                listeligne.Clear();
                listelignelib.Clear();
                listelignelibg.Clear();
                listepointslibg.Clear();
                inter1 = new Point(0, 0);
                inter1g = new Point(0, 0);
                début = new Point(0, 0);
                débutlib = new Point(0, 0);
                débutlibg = new Point(0, 0);
                arrivé = new Point(0, 0);
                arrivélib = new Point(0, 0);
                arrivélibg = new Point(0, 0);
                ng = 0;
                n = 0;
                p = new Point(0, 0);
                p1 = new Point(0, 0);
                pg = new Point(0, 0);
                p1g = new Point(0, 0);
                rectselect = Rectangle.Empty;
                liste.Clear();
                emplacement = new Point(0, 0);
                texte = null;
                couleurtexte = Color.Empty;
                ouvert = false;// on ouvre une fois et remet à faux
            }


            //SELECTION

            if (selection)//si on selectionne
            {
                if(rectselect != Rectangle.Empty)// si le rectangle n est pas nul
                e.Graphics.DrawRectangle(stylotempo, rectselect);// tracé le rectselect
            }


            //TEXTE
            foreach (texte_complet t in liste)// pour tout les texte complet de la liste
            {
                e.Graphics.DrawString(t.Texte, t.Font, new SolidBrush(t.Couleur), t.Location);// le dessiner
            }

            //RECTANGLE
            if (rectangle)//si on fait un rectangle
            {
                if (tempo == true)// si il est temporaire
                {
                    if (plein == false)
                    {
                        e.Graphics.DrawRectangle(stylotempo, recTempo);
                    }
                    else
                    {
                        e.Graphics.FillRectangle(pinceautempo, recTempo_plein); // on trace le rectangleplein temporaire
                    }
                }
            }

            foreach (Rectangle_couleur_epaisseur r in listeRectangle_couleur_epaisseur) // pour tous les les rectangle  le tracé
            {
                e.Graphics.DrawRectangle(r.Pen, r.Rect);
            }
            foreach (Rectangle_couleur_epaisseur_plein rp in listeRectangle_couleur_epaisseur_plein)//sinon pour tous les rectangles de la liste on trace le rectangleplein
            {
                e.Graphics.FillRectangle(rp.Pen_plein, rp.Rect_plein);
            }


            //OVALE
            if (ovale)//si on fait un ovale
            {
                if (tempo == true)// si il est temporaire
                {
                    if (plein == false)
                    {
                        e.Graphics.DrawEllipse(stylotempo, ovaTempo);
                    }
                    else
                    {
                        e.Graphics.FillEllipse(pinceautempo, ovaTempo_plein);
                    }
                }
            }

            foreach (Ovale_couleur_epaisseur r in listeOvale_couleur_epaisseur) // pour tous les ovales  le tracé
            {
                e.Graphics.DrawEllipse(r.Pen, r.Rect);
            }
            foreach (Ovale_couleur_epaisseur_plein rp in listeOvale_couleur_epaisseur_plein)//sinon pour tous les ovales de la liste on trace le ovaleplein
            {
                e.Graphics.FillEllipse(rp.Pen_plein, rp.Rect_plein);
            }


            //LIGNE
            if (ligne)// si on fait une ligne
            {
                if (tempo)//si il est temporaire
                {
                    e.Graphics.DrawLine(stylotempo, début, arrivé);
                }
            }

            foreach (Line lignes in listeligne)// pour tous les lignes  le tracé
            {
                e.Graphics.DrawLine(lignes.Pen, lignes.Start, lignes.End);
            }


            //FIGURE LIBRE
            if(figurelib)// si on fait une figure libre
            {
                if (tempo)// si il est temporaire
                {
                    if (n >= 1) // si il y a 1 ou + de 2 points
                    {
                        p = listepointslib[n - 1]; // p prend le point de depart
                        p1 = listepointslib[n]; // p1 prend le point d arrivé
                        listelignelib.Add(new Line(p, p1, couleur, epais));// ajoute une ligne a la liste avec ces 2 points
                    }
                }
            }
            foreach (Line lignes in listelignelib) // pour toutes les lignes de la liste
            {
                e.Graphics.DrawLine(lignes.Pen, lignes.Start, lignes.End); //dessine les lignes
            }

            //GOMME
            if (gomme)// si on fait une figure libre
            {
                if (tempo)// si il est temporaire
                {
                    if (ng >= 1) // si il y a 1 ou + de 2 points
                    {
                        pg = listepointslibg[ng - 1]; // p prend le point de depart
                        p1g = listepointslibg[ng]; // p1 prend le point d arrivé
                        listelignelibg.Add(new Line(pg, p1g, Color.White, epais));// ajoute une ligne a la liste avec ces 2 points
                    }
                }
            }
            foreach (Line lignes in listelignelibg) // pour toutes les lignes de la liste
            {
                e.Graphics.DrawLine(lignes.Pen, lignes.Start, lignes.End); //dessine les lignes
            }


            //POLYGONE
            if (polygone)//si on fait un polygone
            {
                if (tempo)// si il est temporaire
                {
                    if (plein)//si il est plein
                    {
                        if (listedepoint.Count > 1)// si il ya plus d un point dans la liste
                        {
                            e.Graphics.FillPolygon(pinceautempo, listedepoint.ToArray());// toarray pour avoir acces au rang de la liste
                        }
                    }
                    else// si il est vide
                    {
                        if (listedepoint.Count > 1)// si il ya plus d un point dans la liste
                        { 
                            e.Graphics.DrawPolygon(stylotempo, listedepoint.ToArray());
                        }
                    }
                }
            }


            foreach (Polygone_couleur_epaisseur pol in listedepoly)// pour toutes les polygone de la liste
            {

                if (pol.Listep.Count > 1)// si il ya plus d un point dans la liste
                {
                    e.Graphics.DrawPolygon(pol.Pen, pol.Listep.ToArray());
                }
            }
            foreach (Polygone_couleur_epaisseur_plein pol in listedepolyplein)// pour toutes les polygone plein de la liste
            {

                if (pol.Listep_p.Count > 1)// si il ya plus d un point dans la liste
                {
                    e.Graphics.FillPolygon(pol.Pen_plein, pol.Listep_p.ToArray());
                }
            }
        }

        private void zone_dessin_MouseClick(object sender, MouseEventArgs e)//sur un clique sur zone de dessin
        {
            if (polygone)//si on fait un polygone
            {
                tempo = true;//temporaire est vrai
                pointinsere.X = e.X;//le point a ajouter prend les coordonnées du curseur
                pointinsere.Y = e.Y;
                listedepoint.Add(pointinsere);//et ajouter a la liste de point
            }

            if (textet)
            {
                emplacement = e.Location;//emplacement prend l endroit du clique
                texte.Location = emplacement;//donner au label virtuel

                fontDialog1.ShowDialog();// affiche fenetre mise en forme
                texte.Font = fontDialog1.Font;//donner au label virtuel

                colorDialog1.ShowDialog();// affiche fenetre couleur
                couleur = colorDialog1.Color;

                Texte fenetre = new Texte();// affiche la fenetre pour le choix du texte
                fenetre.ShowDialog();
                texte.Text = fenetre.textBox1.Text;//donner au label virtuel

                liste.Add(new texte_complet(texte.Text, texte.Font, couleur, texte.Location));// ajoute a liste des labels
            }
            Refresh();// on raffraichi l image
        }

        private void zone_dessin_MouseDoubleClick(object sender, MouseEventArgs e)// sur un double clique sur la zone de dessin
        {
            if (polygone)// si on fait un polygone
            {
                if (plein)//si on le veut plein
                {
                    if (couleur != Color.Empty)// si la couleur est choisi
                    {
                        listedepolyplein.Add(new Polygone_couleur_epaisseur_plein(listedepoint, couleur));// on ajoute un polygone plein a la liste
                    }
                    else//sinon
                    {
                        MessageBox.Show("veuillez choisir une couleur");// on affiche un message demandant de selectionner une couleur
                        colorDialog1.ShowDialog();// affiche la palette
                        couleur = colorDialog1.Color;// couleur prend la valeur choisit
                        listedepolyplein.Add(new Polygone_couleur_epaisseur_plein(listedepoint, couleur));// on ajoute un polygone plein a la liste
                    }
                }
                else//si on le veut vide
                {
                    if (couleur != Color.Empty)// si la couleur est choisi
                    {
                        if (epais != 0)//si l epaisseur est choisi
                        {
                            listedepoly.Add(new Polygone_couleur_epaisseur(listedepoint, couleur, epais));// on ajoute un polygone a la liste
                        }
                        else //sinon
                        {
                            Epaisseur fenetre = new Epaisseur();// on crée une fenetre epaisseur
                            fenetre.ShowDialog();// on laffiche
                            epais = fenetre.numericUpDown1.Value;// apais prend la valeur choisit
                            listedepoly.Add(new Polygone_couleur_epaisseur(listedepoint, couleur, epais));// on ajoute un polygone a la liste
                        }
                    }
                    else//sinon
                    {
                        Epaisseur fenetre = new Epaisseur();// on crée une fenetre epaisseur
                        fenetre.ShowDialog();// on laffiche
                        epais = fenetre.numericUpDown1.Value;// apais prend la valeur choisit
                        MessageBox.Show("veuillez choisir une couleur");// on affiche un message demandant de selectionner une couleur
                        colorDialog1.ShowDialog();// affiche la palette
                        couleur = colorDialog1.Color;// couleur prend la valeur choisit
                        listedepoly.Add(new Polygone_couleur_epaisseur(listedepoint, couleur, epais));// on ajoute un polygone a la liste
                    }
                }

                listedepoint.Clear();// on vide la liste de point
                tempo = false;//temporaire est faux
                Refresh();// on raffraichi l image
            }
        }





        private void saveFileDialog1_FileOk(object sender, CancelEventArgs e) //si l utilisateur valide l'enregistrement alors
        {
            image.Save(saveFileDialog1.FileName); // enregistre le dessin
        }

        private void printPreviewDialog1_Load(object sender, EventArgs e)
        {

        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            Bitmap impr = new Bitmap(zone_dessin.Width, zone_dessin.Height);
            zone_dessin.DrawToBitmap(impr, zone_dessin.ClientRectangle);
            e.Graphics.DrawImage(impr, 0, 0);
        }

     



        // EVENEMENTS CLICK

        //OUTILS
        private void RectangleToolStripMenuItem_Click(object sender, EventArgs e)// clique outil/rectangle ou son raccourci
        {
            coller = false;//on colle pas
            textet = false;// on ecrit pas 
            selection = false;// on selectionne pas
            rectselect = Rectangle.Empty;
            gomme = false; // on efface pas
            polygone = false;// on ne fait de polygone
            figurelib = false;// on ne fait pas figure libre
            ovale = false;//on ne fait pas ovale
            ligne = false;//on ne fait pas ligne
            rectangle = true;//on fait un rectangle
        }

        private void ovaleToolStripMenuItem_Click(object sender, EventArgs e)//clique outil/ovale ou son raccourci
        {
            coller = false;//on colle pas
            textet = false;// on ecrit pas 
            selection = false;// on selectionne pas
            rectselect = Rectangle.Empty;
            gomme = false; // on efface pas
            polygone = false;// on ne fait de polygone
            figurelib = false;// on ne fait pas figure libre
            rectangle = false;// on en fait pas rectagle
            ligne = false;// on ne fait pas ligne
            ovale = true;// on fait un ovale
        }
        
        private void polygoneToolStripMenuItem_Click(object sender, EventArgs e)//clique outil/polygone ou son raccourci
        {
            coller = false;//on colle pas
            textet = false;// on ecrit pas 
            selection = false;// on selectionne pas
            rectselect = Rectangle.Empty;
            gomme = false; // on efface pas
            figurelib = false;// on ne fait pas figure libre
            rectangle = false;//on ne fait pas un rectangle
            ovale = false;//on ne fait pas ovale
            ligne = false;// on ne fait pas une ligne            
            polygone = true;// on fait de polygone
        }

        private void ligneToolStripMenuItem_Click(object sender, EventArgs e)// clique outil/ligne ou son raccourci
        {
            coller = false;//on colle pas
            textet = false;// on ecrit pas 
            selection = false;// on selectionne pas
            rectselect = Rectangle.Empty;
            gomme = false; // on efface pas
            polygone = false;// on ne fait de polygone
            figurelib = false;// on ne fait pas figure libre
            rectangle = false;//on ne fait pas un rectangle
            ovale = false;//on ne fait pas ovale
            ligne = true;// on fait une ligne
        }

        private void figureLibreToolStripMenuItem_Click(object sender, EventArgs e)//clique outil/figure libre ou son raccourci
        {
            coller = false;//on colle pas
            textet = false;// on ecrit pas 
            selection = false;// on selectionne pas
            rectselect = Rectangle.Empty;
            gomme = false; // on efface pas
            polygone = false;// on ne fait de polygone
            rectangle = false;// on en fait pas rectagle
            ligne = false;// on ne fait pas ligne
            ovale = false;// on ne fait pas un ovale
            figurelib = true;// on fait figure libre
        }

        private void gommeToolStripMenuItem_Click(object sender, EventArgs e)//clique outil/gomme ou son raccourci
        { 
            coller = false;//on colle pas
            textet = false;// on ecrit pas 
            selection = false;// on selectionne pas
            rectselect = Rectangle.Empty;
            polygone = false;// on ne fait de polygone
            rectangle = false;// on en fait pas rectagle
            ligne = false;// on ne fait pas ligne
            ovale = false;// on ne fait pas un ovale
            figurelib = false;// on ne fait figure libre
            gomme = true; // on efface
        }
        
        private void selectionnerToolStripMenuItem_Click(object sender, EventArgs e)// clique outil/selectionner ou son raccourci
        {
            coller = false;//on colle pas
            textet = false;// on ecrit pas 
            polygone = false;// on ne fait de polygone
            rectangle = false;// on en fait pas rectagle
            ligne = false;// on ne fait pas ligne
            ovale = false;// on ne fait pas un ovale
            figurelib = false;// on ne fait figure libre
            gomme = false; // on efface pas
            selection = true;// on selectionne
        }

        private void texteToolStripMenuItem_Click(object sender, EventArgs e)//clique outil/texte ou son raccourci
        {
            coller = false;//on colle pas
            polygone = false;// on ne fait de polygone
            rectangle = false;// on en fait pas rectagle
            ligne = false;// on ne fait pas ligne
            ovale = false;// on ne fait pas un ovale
            figurelib = false;// on ne fait figure libre
            gomme = false; // on efface pas
            selection = false;// on selectionne pas
            textet = true;// on ecrit
        }        
        //STYLE
        private void couleurToolStripMenuItem_Click(object sender, EventArgs e)//clique style/couleur ou son raccourci
        {
            colorDialog1.ShowDialog();// créer une palette
            couleur = colorDialog1.Color;// on l affiche
        }

        private void epaisseurToolStripMenuItem_Click(object sender, EventArgs e)// clique sur style/epaisseur ou son raccourci
        {
            Epaisseur fenetre = new Epaisseur();// on crée une fenetre epaisseur
            fenetre.ShowDialog();// on laffiche
            epais = fenetre.numericUpDown1.Value;// apais prend la valeur choisit
        }

        private void videToolStripMenuItem_Click(object sender, EventArgs e)//clique style/remplissage/vide ou son raccourci
        {
            plein = false;// on fait une figure vide
        }

        private void pleinToolStripMenuItem_Click(object sender, EventArgs e)//clique style/remplissage/plein ou son raccourci
        {
            plein = true;// on fait une figure pleine
        }

        private void policeToolStripMenuItem_Click(object sender, EventArgs e)// clique style/police ou son raccourci
        {
            fontDialog1.ShowDialog();
        }

        //AFFICHAGE
        private void barreDessinToolStripMenuItem_Click(object sender, EventArgs e)// clique sur affichage/barre dessin
        {
            switch (Barre_dessin.Visible)//selon la visibilité de la barre dessin
            {
                case true://si elle est visible
                    barreDessinToolStripMenuItem.Image = null; // on decoche
                    Barre_dessin.Visible = false;//on la cache
                    if (Barre_édition.Visible)//decale le panel
                    {
                        zone_dessin.Location = new Point(0, 49);
                    }
                    else
                    {
                        zone_dessin.Location = new Point(0, 24);
                    }
                    break;//fin
                case false:// si invisible
                    barreDessinToolStripMenuItem.Image = cocher; // on coche
                    Barre_dessin.Visible = true;//on l'affiche            
                    if (Barre_édition.Visible)//decale le panel
                    {
                        zone_dessin.Location = new Point(24, 49);
                    }
                    else
                    {
                        zone_dessin.Location = new Point(24, 24);
                    }
                    break;// fin
            }


        }

        private void barreÉditionToolStripMenuItem_Click(object sender, EventArgs e)// clique sur affichage/barre édition
        {
            switch (Barre_édition.Visible)//selon la visibilité de la barre edition
            {
                case true://si elle est visible
                    barreÉditionToolStripMenuItem.Image = null; // on decoche
                    Barre_édition.Visible = false;//on la cache
                    if (Barre_dessin.Visible)//decale le panel
                    {
                        zone_dessin.Location = new Point(24, 24);
                    }
                    else
                    {
                        zone_dessin.Location = new Point(0, 24);
                    }
                    break;//fin
                case false:// si invisible
                    barreÉditionToolStripMenuItem.Image = cocher; // on coche
                    Barre_édition.Visible = true;//on l'affiche
                    if (Barre_dessin.Visible)//decale le panel
                    {
                        zone_dessin.Location = new Point(24, 49);
                    }
                    else
                    {
                        zone_dessin.Location = new Point(0, 49);
                    }
                    break;//fin
            }
        }

        //EDITION
        private void nouveauToolStripMenuItem_Click(object sender, EventArgs e)// clique fichier/nouveau ou son raccourci
        {
            DialogResult retour = MessageBox.Show("Voulez vous enregistrer avant d'ouvrir une autre image ?", "Nouveau", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
            if (retour == DialogResult.Yes)// si on veux enregistrer avant
            {
                if (enregistrer1fois == true) // meme demarche que le quitter
                {
                    image = new Bitmap(zone_dessin.Size.Width, zone_dessin.Size.Height);
                    zone_dessin.DrawToBitmap(image, new Rectangle(zone_dessin.Location, zone_dessin.Size));
                    saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
                    saveFileDialog1.Title = "Sauver une image";
                    image.Save(saveFileDialog1.FileName);
                }
                else
                {
                    image = new Bitmap(zone_dessin.Size.Width, zone_dessin.Size.Height);
                    zone_dessin.DrawToBitmap(image, new Rectangle(zone_dessin.Location, zone_dessin.Size));
                    saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
                    saveFileDialog1.Title = "Sauver une image";
                    saveFileDialog1.ShowDialog();
                }
            }

            listeOvale_couleur_epaisseur.Clear();// on reinitialise tout
            listeOvale_couleur_epaisseur_plein.Clear();
            listeRectangle_couleur_epaisseur.Clear();
            listeRectangle_couleur_epaisseur_plein.Clear();
            listedepoint.Clear();
            listedepoly.Clear();
            listedepolyplein.Clear();
            listepointslib.Clear();
            listeligne.Clear();
            listelignelib.Clear();
            listelignelibg.Clear();
            listepointslibg.Clear();
            inter1 = new Point(0, 0);
            inter1g = new Point(0, 0);
            début = new Point(0, 0);
            débutlib = new Point(0, 0);
            débutlibg = new Point(0, 0);
            arrivé = new Point(0, 0);
            arrivélib = new Point(0, 0);
            arrivélibg = new Point(0, 0);
            ng = 0;
            n = 0;
            rectselect = Rectangle.Empty;
            p = new Point(0, 0);
            p1 = new Point(0, 0);
            pg = new Point(0, 0);
            p1g = new Point(0, 0);
            image2 = zéro;
            liste.Clear();
            emplacement = new Point(0, 0);
            texte = null;
            couleurtexte = Color.Empty;
            
            Refresh();
        }

        private void ouvrirToolStripMenuItem_Click(object sender, EventArgs e)//clique fichier/ouvrir ou son raccouci
        {

            ouvert = true;
            openFileDialog1.InitialDirectory = saveFileDialog1.FileName; // ouvre la navigateur au dernier endroit où un fichier a été enregistrer
            openFileDialog1.FileName = "nom_image"; // nom par defaut de l image
            openFileDialog1.Title = "Ouvrir une image"; // titre du navigateur
            openFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"; // les filtres disponibles lors de la recherche
            openFileDialog1.Multiselect = false; // empeche d'ouvrir plusieurs fichier en meme temps
            openFileDialog1.CheckFileExists = true; // verifie l existance du fichier



            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) // si l'utilisateur valide l'ouverture alors
            {
                string chemin = openFileDialog1.FileName; // on recupere le chemin d acces au fichier
                image2 = new Bitmap(chemin); // la variable image2 prend le dessin voulu
                Refresh(); // on rafraichi le tout
            }
            else
            {
                MessageBox.Show("Vous avez annulé l'ouverture", "Annuler"); // sinon ouvre une messagebox
            }
        }

        private void enregistrersousToolStripMenuItem_Click(object sender, EventArgs e)//clique fichier/enregistrer sous
        {
            image = new Bitmap(zone_dessin.Size.Width, zone_dessin.Size.Height);// meme demarche que dans le quitter
            zone_dessin.DrawToBitmap(image, new Rectangle(zone_dessin.Location, zone_dessin.Size));
            saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
            saveFileDialog1.Title = "Sauver une image";
            saveFileDialog1.ShowDialog();
            enregistrer1fois = true;// deja enregistrer vrai
        }

        private void enregistrerToolStripMenuItem_Click(object sender, EventArgs e)// clique fichier/enregistrer ou son raccourci
        {
            if (enregistrer1fois == true) // meme demarche que le quitter
            {
                image = new Bitmap(zone_dessin.Size.Width, zone_dessin.Size.Height);
                zone_dessin.DrawToBitmap(image, new Rectangle(zone_dessin.Location, zone_dessin.Size));
                saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
                saveFileDialog1.Title = "Sauver une image";
                image.Save(saveFileDialog1.FileName);
            }
            else
            {
                image = new Bitmap(zone_dessin.Size.Width, zone_dessin.Size.Height);
                zone_dessin.DrawToBitmap(image, new Rectangle(zone_dessin.Location, zone_dessin.Size));
                saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
                saveFileDialog1.Title = "Sauver une image";
                saveFileDialog1.ShowDialog();
            }
        }   

        private void quitterToolStripMenuItem_Click(object sender, EventArgs e)// clique fichier/quitter
        {
            DialogResult retour = MessageBox.Show("voulez vous enregistrez avant de quitter?", "fermeture application", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);// affiche un messagebox et retourne un resultat

            if (retour == DialogResult.Yes) // si oui
            {

                if (enregistrer1fois == true) // si deja enregistrer
                {
                    image = new Bitmap(zone_dessin.Size.Width, zone_dessin.Size.Height); // crée une nouvelle image avec les caracteristique du panel
                    zone_dessin.DrawToBitmap(image, new Rectangle(zone_dessin.Location, zone_dessin.Size));
                    saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"; // filtre par defaut d enregistrement
                    saveFileDialog1.Title = "Sauver une image"; // titre par defaut
                    image.Save(saveFileDialog1.FileName); // enregistre sans afficher le navigateur a l endroit ou l image est deja enregistree
                }
                else // si pas enregistrer
                {
                    image = new Bitmap(zone_dessin.Size.Width, zone_dessin.Size.Height); // meme demarche
                    zone_dessin.DrawToBitmap(image, new Rectangle(zone_dessin.Location, zone_dessin.Size));
                    saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
                    saveFileDialog1.Title = "Sauver une image";
                    saveFileDialog1.ShowDialog(); // mais affiche le navigateur pour choisir l emplacement
                }

                Application.Exit(); // ferme l'application et donc la fenetre demarrage et ferme donc par l intermediaire de demarrage_closed
            }

            else // si autre que oui
            {
                if (retour == DialogResult.No) // si non
                {
                    Application.Exit(); // ferme l'application et donc la fenetre demarrage et ferme donc par l intermediaire de demarrage_closed
                }
                else // sinon  soit annuler
                {
                    MessageBox.Show("vous avez annulé la fermeture de l'application"); // affiche une messagebox
                }

            } 
        }               
        
        private void copierToolStripMenuItem_Click(object sender, EventArgs e)//clique edition/copier ou son raccourci
        {
            copier = true;
            selection = true;// on selectionne
            coller = false;//on colle pas
            polygone = false;// on ne fait de polygone
            rectangle = false;// on en fait pas rectagle
            ligne = false;// on ne fait pas ligne
            ovale = false;// on ne fait pas un ovale
            figurelib = false;// on ne fait figure libre
            gomme = false; // on efface pas
            textet = false; // on ecrit pas

        }        
        
        private void collerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            coller = true;//on colle 
            copier = false;// on ne copie plus
            selection = false;// on selectionne plus
            polygone = false;// on ne fait de polygone
            rectangle = false;// on en fait pas rectagle
            ligne = false;// on ne fait pas ligne
            ovale = false;// on ne fait pas un ovale
            figurelib = false;// on ne fait figure libre
            gomme = false; // on efface pas
            textet = false;// on ecrit pas

            if (rectselect != Rectangle.Empty)
            {
                im_copier = new Bitmap(rectselect.Size.Width , rectselect.Size.Height);// on copie la selection dans une image
                zone_dessin.DrawToBitmap(im_copier, rectselect);
                im_copier.Save(@"C:\Users\peillon\Documents\iut\im_copier.bmp");
                
            }

        }
        
        private void imprimerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (printDialog1.ShowDialog() == DialogResult.OK)
            {
                printDocument1.Print();
            }
        }

        private void aperçuavantimpressionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            printPreviewDialog1.ShowDialog();
            
        }



    }
}

1 réponse

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
14 mars 2012 à 21:13
Bonsoir, ha ben non.

trop d'info tue l'info.
Même si j'avais envie de copier/coller ton code dans un projet tout neuf, je vais:
me prendre la tête avec les noms dizaines de contrôles que tu as mis sur ton formulaire,
chercher comment tu as abonné les événements à ces contrôles, surtout si plusieurs d'entre eux sont abonnés à un même évènement,
passer du temps a chercher ou ça ne marche pas, pourquoi et comment tu voudrais que ça marche.

Poste le ou les bouts de codes utiles pour que nous puissions t'aider, dis "bonjour", "s'il vous plait", "merci" et peut être qu'on s'y penchera.

De manière générale, en c# les classes remplacent avantageusement les structures, je pense par exemple que ton code est simplifiable avec l'héritage: un rectangle c'est toujours 4 points ensuite tu en dérives un avec une bordure, autre plein et un troisième transparent...

Pour plus de lisibilité, tu peux aussi écrire une classe par fichier .cs.


Cordialement

Whismeril
0
Rejoignez-nous