// // Déclenchement centralisé des événements // /// <summary> /// Déclenchement centralisé de l'événement <see cref="DragStart"/> /// </summary> /// <param name="e">descripteur de l'événement</param> protected virtual void OnDragStart( DragStartEventArgs e ) { if ( DragStart != null ) DragStart( this, e ); }
/// <summary> /// Démarre une opération glisser-déplacer /// </summary> /// <param name="e">descripteur de l'événement souris</param> /// <remarks>l'opération effectuée par la cible</remarks> /// <returns>l'effet réalisé par la cible du drop</returns> protected virtual DragDropEffects DoDragDrop( MouseEventArgs e ) { DragDropEffects result = DragDropEffects.None; try { if ( DesignMode ) return result; // construire l'objet transitionnel du drag-drop IDataObject dataObject = new DataObject(); // si prise en charge du drag-drop des onglets, déterminer l'index de l'onglet à glisser if ( autoDragTabs ) { int draggedIndex = TabIndexFromLocation( dragWatcher.Location ); if ( draggedIndex < 0 || draggedIndex >= TabCount ) throw new ArgumentOutOfRangeException( "dragTabIndex", draggedIndex, "Impossible de démarrer le drag-drop automatique d'onglet" ); dataObject.SetData( AutoDragTabFormat, draggedIndex ); } // noter que le dragging commence dragWatcher.DragStart(); // diffuser l'événement DragStart DragStartEventArgs args = new DragStartEventArgs( DragDropEffects.Scroll, dataObject, dragWatcher.Button, dragWatcher.Location, false ); OnDragStart( args ); if ( args.Cancel || args.AllowedEffects == DragDropEffects.None ) return result; // effectuer le protocole drag-drop result = DoDragDrop( dataObject, args.AllowedEffects ); // terminer le protocole drag-drop côté source if ( result != DragDropEffects.None ) OnDragTerminate( new DragEventArgs( dataObject, 0, 0, 0, args.AllowedEffects, result ) ); } finally { dragWatcher.DragTerminate(); } return result; }