public bool ProcessDnD(Control control, object eventSender)
        {
            bool ret = false;

            _currentProceededDragSource.HandleDragStart(eventSender, _lastCreatedDragSourceEventArgs);
            _currentProceededDragSource.HandleDragSetData(eventSender, _lastCreatedDragSourceEventArgs);

            control.GiveFeedback      += HandleGiveFeedback;
            control.QueryContinueDrag += HandleQueryContinueDrag;
            try {
                DragDropEffects effect = control.DoDragDrop(
                    _lastCreatedDragSourceEventArgs.DataObject,
                    _currentProceededDragSource.AllowedEffects
                    );
                _lastCreatedDragSourceEventArgs.Effects = effect;
                ret = effect != DragDropEffects.None;
            } finally {
                control.GiveFeedback      -= HandleGiveFeedback;
                control.QueryContinueDrag -= HandleQueryContinueDrag;
            }
            _currentProceededDragSource.HandleDragFinish(eventSender, _lastCreatedDragSourceEventArgs);

            ClearDnDState();

            return(ret);
        }