private void SelectionMultiples()
        {
            CListeObjetsDonnees liste = ListeRelations;

            CObjetDonneeAIdNumerique[] elts = (CObjetDonneeAIdNumerique[])CInterpreteurTextePropriete.CreateListeFrom(
                liste, "ElementLie", typeof(CObjetDonneeAIdNumerique));
            elts = CFormSelectElementsMultiples.GetListeElements(
                m_typeRelation.TypeElements,
                m_typeRelation.FiltreDataAssocie,
                elts);
            if (elts != null)
            {
                using (CWaitCursor waiter = new CWaitCursor())
                {
                    //Table Entite->Vrai si existe dans les deux liste
                    //			->Faux si existe uniquement dans l'ancienne liste (à supprimer)
                    //			->Null si existe uniquement dans la nouvelle liste (à créer)
                    Hashtable tableExistants = new Hashtable();
                    foreach (CRelationEntreeAgenda_ElementAAgenda rel in ListeRelations)
                    {
                        tableExistants[rel.ElementLie] = false;
                    }
                    foreach (CObjetDonneeAIdNumerique objet in elts)
                    {
                        if (tableExistants[objet] == null)                          //création
                        {
                            CRelationEntreeAgenda_ElementAAgenda rel = new CRelationEntreeAgenda_ElementAAgenda(m_entreeAgenda.ContexteDonnee);
                            rel.CreateNewInCurrentContexte();
                            rel.ElementLie   = objet;
                            rel.EntreeAgenda = m_entreeAgenda;
                            rel.RelationTypeEntree_TypeElement = m_typeRelation;
                        }
                        else
                        {
                            tableExistants[objet] = true;
                        }
                    }
                    //Supprime ceux qui doivent être supprimés
                    foreach (CRelationEntreeAgenda_ElementAAgenda rel in ListeRelations.ToArrayList())
                    {
                        object val = tableExistants[rel.ElementLie];
                        if (val is bool && ((bool)val) == false)
                        {
                            rel.Delete();
                        }
                    }
                }
            }
            RefreshText();
        }
        /// <summary>
        /// Sélectionne une liste d'éléments du type demandé
        /// </summary>
        /// <param name="typeElements"></param>
        /// <param name="filtreElements"></param>
        /// <param name="elementsSelectionnes"></param>
        /// <returns>null si abandon, sinon, une liste d'éléments</returns>
        public static CObjetDonneeAIdNumerique[] GetListeElements(Type typeElements,
                                                                  CFiltreData filtreElements,
                                                                  CObjetDonneeAIdNumerique[] elementsSelectionnes)
        {
            CFormSelectElementsMultiples form = new CFormSelectElementsMultiples( );

            form.m_panelSelection.Init(typeElements, elementsSelectionnes, filtreElements);
            bool bResult = form.ShowDialog() == DialogResult.OK;

            CObjetDonneeAIdNumerique[] objets = null;
            if (bResult)
            {
                objets = form.m_panelSelection.ElementSelectionnes;
            }
            form.Dispose();
            return(objets);
        }