/// <include file='doc\SelectionUIHandler.uex' path='docs/doc[@for="SelectionUIHandler.DragMoved"]/*' />
        /// <devdoc>
        ///     Called when the user has moved the mouse.  This will only be called on
        ///     the designer that returned true from beginDrag.  The designer
        ///     should update its UI feedback here.
        /// </devdoc>
        public virtual void DragMoved(object[] components, Rectangle offset)
        {
            dragOffset = offset;

            // Since we do full drag, begin a batch operation now so that
            // we don't fire ten thousand change events.  We also
            // call ComponentChanging so that any srcsafe stuff
            // can happen.
            //
            if (originalCoords == null && components.Length > 0)
            {
                IDesignerHost host = (IDesignerHost)GetService(typeof(IDesignerHost));
                Debug.Assert(host != null, "We really need a designer host here.");

                moveTrans = host.CreateTransaction(SelectionUIService.GetTransactionName(rules, components));
            }

            MoveControls(components, false, false);
            Debug.Assert(originalCoords != null, "We are keying off of originalCoords, but MoveControls didn't set it");
        }