private void Btn_supprimerStagiaire_Click(object sender, EventArgs e)
        {
            if (lst_stagiaires.Items.Count > 0)
            {
                classeStagiaire stagiaireSelectionne = (classeStagiaire)this.lst_stagiaires.SelectedItem;
                classeStage     stageSelectionne     = (classeStage)this.lst_stages.SelectedItem;

                if (stagiaireSelectionne != null)
                {
                    DialogResult confirmation = MessageBox.Show("Êtes-vous sûr de vouloir supprimer ?", "Confirmation",
                                                                MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);

                    if (confirmation == DialogResult.OK)
                    {
                        int index = lst_stagiaires.SelectedIndex;
                        lst_stagiaires.Items.RemoveAt(index);
                        // Vide l'affichage des stages
                        lst_stages.DataSource = null;
                        // Vide l'affichage d'information
                        txt_affichage.Text = "";
                    }
                }
                else
                {
                    MessageBox.Show("Veuillez selectionner un stagiaire a supprimer", "Erreur",
                                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                MessageBox.Show("La liste des stagiaires est vide", "Erreur",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
        private void btn_supprimerStage_Click(object sender, EventArgs e)
        {
            if (lst_stages.Items.Count > 0)
            {
                classeStagiaire stagiaireSelectionne = (classeStagiaire)this.lst_stagiaires.SelectedItem;
                classeStage     stageSelectionne     = (classeStage)this.lst_stages.SelectedItem;

                if (stageSelectionne != null)
                {
                    DialogResult confirmation = MessageBox.Show("Êtes-vous sûr de vouloir supprimer ?", "Confirmation",
                                                                MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);

                    if (confirmation == DialogResult.OK)
                    {
                        int index = lst_stages.SelectedIndex;
                        stagiaireSelectionne.m_stages.Items.RemoveAt(index);
                        // updater fenetre des stages
                        lst_stages.DataSource = creerListeStage(stagiaireSelectionne);
                        lst_stages_SelectedIndexChanged(sender, e);
                    }
                }
                else
                {
                    MessageBox.Show(
                        "Veuillez SVP selectionner un stage à supprimer", "Erreur",
                        MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                MessageBox.Show(
                    "La liste des stages est vide", "Erreur",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
        private void lst_stagiaires_SelectedIndexChanged(object sender, EventArgs e)
        {
            classeStagiaire stagiaireSelectionne = (classeStagiaire)this.lst_stagiaires.SelectedItem;
            classeStage     stageSelectionne     = (classeStage)this.lst_stages.SelectedItem;


            if (stagiaireSelectionne != null)
            {
                lst_stages.DataSource = creerListeStage(stagiaireSelectionne);

                StringBuilder sb            = new StringBuilder();
                string        infoStagiaire = "Numéro d'employé(e): {0} \r\nNom: {1} \r\nTéléphone: {2} \r\nCouriel: {3}\n";


                sb.AppendFormat(infoStagiaire, stagiaireSelectionne.m_id.ToString(),
                                stagiaireSelectionne.m_nom,
                                stagiaireSelectionne.m_telephone,
                                stagiaireSelectionne.m_courriel);
                lst_stages.ClearSelected();
                txt_affichage.Text = sb.ToString();
            }
            else
            {
                lst_stages = m_stageVide;
            }
        }
        public classeStagiaire chargerStagiaire(XmlReader p_doc)
        {
            // Aucun ReadStartElement()

            int    id        = Convert.ToInt32(p_doc.GetAttribute(XML_ATTR_ID));
            string nom       = p_doc.GetAttribute(XML_ATTR_NOM);
            string telephone = p_doc.GetAttribute(XML_ATTR_TELEPHONE);
            string courriel  = p_doc.GetAttribute(XML_ATTR_COURRIEL);

            classeStagiaire nouveau = new classeStagiaire(id, nom, telephone,
                                                          courriel, new ListBox());

            p_doc.ReadToDescendant("stage");

            //Lire sans savoir si on a terminé
            while (p_doc.IsStartElement(XML_ELM_STAGE))
            {
                nouveau.m_stages.Items.Add(chargerStage(p_doc));
            }

            // Pour passer par-dessus </stagiaire>
            p_doc.Skip();

            return(nouveau);
        }
        // Ajouter stage
        private void btn_stage_Click(object sender, EventArgs e)
        {
            // si il y a au moins 1 stagiaire
            if (lst_stagiaires.Items.Count > 0)
            {
                classeStagiaire stagiaireSelectionne = (classeStagiaire)this.lst_stagiaires.SelectedItem;

                if (stagiaireSelectionne != null)
                {
                    stage nouvelleFenetre = new stage(null);

                    if (nouvelleFenetre.ShowDialog() == DialogResult.OK)
                    {
                        stagiaireSelectionne.m_stages.Items.Add(nouvelleFenetre.m_stage);

                        // pour refresh la liste
                        lst_stages.DataSource = creerListeStage(stagiaireSelectionne);
                    }
                }
                else
                {
                    MessageBox.Show("Aucun stagiaire de sélectionné", "Erreur",
                                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                MessageBox.Show("La liste de stagiaire est vide", "Erreur",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
        public List <classeStage> creerListeStage(classeStagiaire p_stagiaire)
        {
            List <classeStage> nouvelleListe = new List <classeStage>();

            foreach (classeStage stage in p_stagiaire.m_stages.Items)
            {
                nouvelleListe.Add(stage);
            }
            return(nouvelleListe);
        }
        private bool estInfoStagiaire(classeStagiaire p_stagiaire)
        {
            bool trouve = false;

            if (p_stagiaire.m_id.ToString().Contains(txt_recherche.Text) ||
                p_stagiaire.m_nom.ToString().Contains(txt_recherche.Text) ||
                p_stagiaire.m_courriel.ToString().Contains(txt_recherche.Text) ||
                p_stagiaire.m_telephone.ToString().Contains(txt_recherche.Text))
            {
                trouve = true;
            }
            return(trouve);
        }
        private classeStagiaire trouverStagiaireParId(int p_id)
        {
            classeStagiaire resultat = null;

            foreach (classeStagiaire stagiaire in m_stagiaires.Items)
            {
                if (p_id == stagiaire.m_id)
                {
                    resultat = stagiaire;
                }
            }
            return(resultat);
        }
        private bool dejaTrouve(classeStagiaire p_stagiaire)
        {
            bool trouve = false;

            foreach (classeStagiaire stagiaire in lst_stagiaires.Items)
            {
                if (!trouve)
                {
                    if (p_stagiaire.m_id == stagiaire.m_id)
                    {
                        trouve = true;
                    }
                }
            }
            return(trouve);
        }
        private void txt_id_Validating(object sender, CancelEventArgs e)
        {
            if (txt_id.Text == "") // si la case est vide
            {
                e.Cancel = true;
                this.gestionnaireErreurs.SetError(this.txt_id, "Vous devez rajouter un Identifiant");
            }
            else if (!m_regex_numero.IsMatch(txt_id.Text))   // si la case contient autre chose que un nombre
            {
                e.Cancel = true;
                this.gestionnaireErreurs.SetError(this.txt_id, "Votre ID doit être un nombre");
            }
            else if (m_regex_numero.IsMatch(txt_id.Text))     // si la case contient un nombre

            {
                bool conversion = true;
                try {
                    int id = Convert.ToInt32(txt_id.Text);
                }
                catch (Exception) {
                    e.Cancel = true;
                    this.gestionnaireErreurs.SetError(this.txt_id, "Le ID est un nombre trop grand");
                    conversion = false;
                }
                if (conversion)
                {
                    int             id          = Convert.ToInt32(txt_id.Text);
                    classeStagiaire stagiaireId = trouverStagiaireParId(id);

                    // si le numero est deja utilisé et que l'on ne le modifie pas alors erreur
                    if (stagiaireId != null && stagiaireId != m_stagiaire)
                    {
                        e.Cancel = true;
                        this.gestionnaireErreurs.SetError(this.txt_id, "Votre ID est déja utilisé");
                    }
                    else   // nombre non utilise
                    {
                        this.gestionnaireErreurs.SetError(this.txt_id, "");
                    }
                }
            }
        }
        private void btn_ok_Click(object sender, EventArgs e)
        {
            if (this.ValidateChildren())
            {
                if (this.Text == "Ajouter un stagiaire")
                {
                    m_stagiaire = new classeStagiaire(Convert.ToInt32(txt_id.Text), txt_nom.Text,
                                                      txt_telephone.Text, txt_courriel.Text, new ListBox());
                }
                else if (this.Text == "Modifier un stagiaire")
                {
                    m_stagiaire.m_id        = Convert.ToInt32(txt_id.Text);
                    m_stagiaire.m_nom       = txt_nom.Text;
                    m_stagiaire.m_telephone = txt_telephone.Text;
                    m_stagiaire.m_courriel  = txt_courriel.Text;
                }
                this.DialogResult = DialogResult.OK;

                this.Close(); // fermer fenetre
            }
        }
        public stagiaire(classeStagiaire p_stagiaire, ListBox p_stagiaires)
        {
            InitializeComponent();
            btn_annuler.CausesValidation = false;

            m_stagiaires = p_stagiaires;

            if (p_stagiaire == null)
            {
                this.Text = "Ajouter un stagiaire";
            }
            else
            {
                this.Text   = "Modifier un stagiaire";
                m_stagiaire = p_stagiaire;

                txt_id.Text        = p_stagiaire.m_id.ToString();
                txt_nom.Text       = p_stagiaire.m_nom;
                txt_telephone.Text = p_stagiaire.m_telephone;
                txt_courriel.Text  = p_stagiaire.m_courriel;
            }
        }
        private void SauvegarderStagiaire(XmlWriter p_document, classeStagiaire p_stagiaire)
        {
            Debug.Assert(p_document != null);
            Debug.Assert(p_stagiaire != null);

            // <stagiaire>
            p_document.WriteStartElement(XML_ELM_STAGIAIRE);

            p_document.WriteAttributeString(XML_ATTR_ID, p_stagiaire.m_id.ToString());
            p_document.WriteAttributeString(XML_ATTR_NOM, p_stagiaire.m_nom);
            p_document.WriteAttributeString(XML_ATTR_TELEPHONE, p_stagiaire.m_telephone);
            p_document.WriteAttributeString(XML_ATTR_COURRIEL, p_stagiaire.m_courriel);

            foreach (classeStage stage in p_stagiaire.m_stages.Items)
            {
                // <stage>
                SauvegarderStage(p_document, stage);
                // </stage>
            }

            // </stagiaire>
            p_document.WriteEndElement();
        }
        private void btn_modifierStagiaire_Click(object sender, EventArgs e)
        {
            classeStagiaire stagiaireSelectionne = (classeStagiaire)this.lst_stagiaires.SelectedItem;

            if (stagiaireSelectionne != null)
            {
                stagiaire nouvelleFenetre = new stagiaire(stagiaireSelectionne, lst_stagiaires);

                if (nouvelleFenetre.ShowDialog() == DialogResult.OK)
                {
                    int index = lst_stagiaires.SelectedIndex;
                    lst_stagiaires.Items.RemoveAt(index);
                    lst_stagiaires.Items.Insert(index, nouvelleFenetre.m_stagiaire);
                    lst_stagiaires.SetSelected(index, true);
                    lst_stagiaires_SelectedIndexChanged(sender, e);
                }
            }
            else
            {
                MessageBox.Show("Veuillez SVP selectionner un(e) stagiaire à modifier.", "Erreur",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
        private void btn_modifierStage_Click(object sender, EventArgs e)
        {
            classeStagiaire stagiaireSelectionne = (classeStagiaire)this.lst_stagiaires.SelectedItem;
            classeStage     stageSelectionne     = (classeStage)this.lst_stages.SelectedItem;

            if (stagiaireSelectionne != null && stageSelectionne != null)
            {
                stage nouvelleFenetre = new stage(stageSelectionne);
                if (nouvelleFenetre.ShowDialog() == DialogResult.OK)
                {
                    int index = lst_stages.SelectedIndex;
                    stagiaireSelectionne.m_stages.Items.RemoveAt(index);
                    stagiaireSelectionne.m_stages.Items.Insert(index, nouvelleFenetre.m_stage);
                    // updater de liste des stages
                    lst_stages.DataSource = creerListeStage(stagiaireSelectionne);
                }
            }

            else
            {
                MessageBox.Show("Veuillez SVP selectionner un stage à modifier.", "Erreur",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }