//------------------------------------------------------------
        private CControleEditeLigneCommande AddControleLigne(CLigneCommande ligne)
        {
            CControleEditeLigneCommande ctrl = null;

            if (m_controlesReserve.Count() != 0)
            {
                ctrl = m_controlesReserve.Pop();
            }
            else
            {
                ctrl = new CControleEditeLigneCommande();
                m_panelLignes.Controls.Add(ctrl);
                m_extModeEdition.SetModeEdition(ctrl, sc2i.win32.common.TypeModeEdition.EnableSurEdition);
                ctrl.OnAddLine += new EventHandler(ctrl_OnAddLine);
                ctrl.OnDelete  += new EventHandler(ctrl_OnDelete);
                ctrl.OnGoDown  += new EventHandler(ctrl_OnGoDown);
                ctrl.OnGoUp    += new EventHandler(ctrl_OnGoUp);
            }
            ctrl.BringToFront();
            ctrl.Dock                  = DockStyle.Top;
            ctrl.LockEdition           = !m_extModeEdition.ModeEdition;
            ctrl.FournisseurPourFiltre = m_fournisseurPourFiltre;
            ctrl.Init(ligne, ligne.Numero == 0);
            ctrl.Visible = true;
            return(ctrl);
        }
        //------------------------------------------------------------
        void ctrl_OnGoDown(object sender, EventArgs e)
        {
            CControleEditeLigneCommande ctrl = sender as CControleEditeLigneCommande;

            if (ctrl == null)
            {
                return;
            }
            CLigneCommande ligne = ctrl.Ligne;

            if (ligne.Numero < m_commande.Lignes.Count - 1)
            {
                RenumerotteLignes(ligne.Numero + 1, ligne.Numero + 1, -1);
                ligne.Numero++;
            }
            SortControls();
        }
        //------------------------------------------------------------
        void ctrl_OnGoUp(object sender, EventArgs e)
        {
            CControleEditeLigneCommande ctrl = sender as CControleEditeLigneCommande;

            if (ctrl == null)
            {
                return;
            }
            CLigneCommande ligne = ctrl.Ligne;

            if (ligne.Numero > 0)
            {
                RenumerotteLignes(ligne.Numero - 1, ligne.Numero - 1, 1);
                ligne.Numero--;
            }
            SortControls();
        }
        //------------------------------------------------------------
        void ctrl_OnAddLine(object sender, EventArgs e)
        {
            CControleEditeLigneCommande ctrl = sender as CControleEditeLigneCommande;

            if (ctrl == null)
            {
                return;
            }
            CLigneCommande ligneRef = ctrl.Ligne;

            RenumerotteLignes(ligneRef.Numero + 1, m_commande.Lignes.Count - 1, 1);
            CLigneCommande ligne = new CLigneCommande(m_commande.ContexteDonnee);

            ligne.Commande = m_commande;
            ligne.Numero   = ligneRef.Numero + 1;
            AddControleLigne(ligne);
            SortControls();
        }
        //------------------------------------------------------------------
        public void Init(CCommande commande)
        {
            m_commande            = commande;
            m_panelLignes.Visible = false;
            m_panelLignes.SuspendDrawing();
            foreach (CControleEditeLigneCommande ctrl in ControlesCommande)
            {
                ctrl.Visible = false;
                m_controlesReserve.Push(ctrl);
            }

            bool bIsFirst = true;

            foreach (CLigneCommande ligne in m_commande.Lignes)
            {
                CControleEditeLigneCommande ctrl = AddControleLigne(ligne);
                ctrl.IsFirst = bIsFirst;
                bIsFirst     = false;
            }
            m_panelLignes.ResumeDrawing();
            m_panelLignes.Visible = true;
        }
        //------------------------------------------------------------
        void ctrl_OnDelete(object sender, EventArgs e)
        {
            CControleEditeLigneCommande ctrl = sender as CControleEditeLigneCommande;

            if (ctrl == null)
            {
                return;
            }
            CLigneCommande ligne   = ctrl.Ligne;
            int            nNumero = ligne.Numero;

            RenumerotteLignes(nNumero, m_commande.Lignes.Count - 1, -1);
            CResultAErreur result = ligne.Delete(true);

            if (!result)
            {
                CFormAlerte.Afficher(result.Erreur);
                return;
            }
            ctrl.Visible = false;
            m_controlesReserve.Push(ctrl);
        }