コード例 #1
0
        private void Control_DragDrop(object sender, DragEventArgs e)
        {
            try
            {
                if (e.Data.GetDataPresent(typeof(DragDropItem <TControl, T>)))
                {
                    DragDropItem <TControl, T> d = (DragDropItem <TControl, T>)e.Data.GetData(typeof(DragDropItem <TControl, T>));

                    TControl pointedParent = (TControl)sender;

                    MoveItemInternal(pointedParent, d, e, true);
                }
            }
            catch (Exception ex)
            {
                LOG.Error("Control_DragDrop - An error occurred while drag dropping", ex);
            }
        }
コード例 #2
0
        private void Control_DragOver(object sender, DragEventArgs e)
        {
            try
            {
                if (e.Data.GetDataPresent(typeof(DragDropItem <TControl, T>)))
                {
                    DragDropItem <TControl, T> d = (DragDropItem <TControl, T>)e.Data.GetData(typeof(DragDropItem <TControl, T>));

                    TControl pointedParent = (TControl)sender;

                    OnDragMove(new DragMoveEventArgs <TControl, T>(d.DragParent, d.DragItem, d.DragItemIndex, d.DragStart, new Point(e.X, e.Y)));

                    MoveItemInternal(pointedParent, d, e, false);
                }
            }
            catch (Exception ex)
            {
                LOG.Error("Control_DragOver - An error occurred while dragging over", ex);
            }
        }
コード例 #3
0
        private bool MoveItemInternal(TControl pointedParent, DragDropItem <TControl, T> d, DragEventArgs e, bool dropping)
        {
            try
            {
                Point p = new Point(e.X, e.Y);

                T   pointedItem;
                int pointedItemIndex;
                if (GetItemFromPoint(pointedParent, pointedParent.PointToClient(p), out pointedItem, out pointedItemIndex) &&
                    e.AllowedEffect == DragDropEffects.Move)
                {
                    OnDragMoveOver(new DragMoveOverEventArgs <TControl, T>(d.DragParent, d.DragItem, d.DragItemIndex, d.DragStart, p, pointedParent, pointedItem, pointedItemIndex));

                    if (AllowDrop(d.DragParent, d.DragItem, d.DragItemIndex, pointedParent, pointedItem, pointedItemIndex))
                    {
                        e.Effect = DragDropEffects.Move;

                        if (dropping ||
                            !MoveOnDragDrop)
                        {
                            MoveItem(d.DragParent, d.DragItem, d.DragItemIndex, pointedParent, pointedItem, pointedItemIndex);

                            d.UpdateSwapped(pointedParent, pointedItemIndex);

                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LOG.Error("MoveItemInternal - An error occurred while moving item", ex);
            }

            e.Effect = DragDropEffects.None;
            return(false);
        }
コード例 #4
0
        private void Control_MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
                if (_mouseDown)
                {
                    TControl parent = (TControl)sender;
                    Point    p      = parent.PointToScreen(e.Location);

                    if (Math.Sqrt(Math.Pow(p.X - _mouseDownLocation.X, 2) + Math.Pow(p.Y - _mouseDownLocation.Y, 2)) >= DRAG_THRESHOLD)
                    {
                        T   item;
                        int itemIndex;
                        if (GetItemFromPoint(parent, e.Location, out item, out itemIndex) &&
                            ItemsEqual(_mouseDownParent, _mouseDownItem, _mouseDownItemIndex, parent, item, itemIndex))
                        {
                            _mouseDown = false;

                            OnDragStart(new DragStartEventArgs <TControl, T>(parent, item, itemIndex, _mouseDownLocation));

                            DragDropItem <TControl, T> dragDropItem = new DragDropItem <TControl, T>(parent, item, itemIndex, _mouseDownLocation);
                            DragDropEffects            effects      = parent.DoDragDrop(dragDropItem, DragDropEffects.Move);

                            OnDragEnd(new DragEndEventArgs <TControl, T>(parent, item, itemIndex, _mouseDownLocation, Control.MousePosition, effects));

                            ClearDragDrop();
                        }
                        else
                        {
                            ClearDragDrop();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LOG.Error("Control_MouseMove - An error occurred while mousing moving", ex);
            }
        }
コード例 #5
0
        private void Control_MouseMove(object?sender, MouseEventArgs e)
        {
            try
            {
                if (_mouseDown)
                {
                    TControl?parent = sender as TControl;
                    if (parent == null)
                    {
                        return;
                    }

                    Point p = parent.PointToScreen(e.Location);

                    if (Math.Sqrt(Math.Pow(p.X - _mouseDownLocation.X, 2) + Math.Pow(p.Y - _mouseDownLocation.Y, 2)) >= DRAG_THRESHOLD)
                    {
                        T item;
                        if (GetItemFromPoint(parent, e.Location, out item !, out int itemIndex) &&
                            ItemsEqual(_mouseDownParent !, _mouseDownItem !, _mouseDownItemIndex, parent, item, itemIndex))
                        {
                            _mouseDown = false;

                            OnDragStart(new DragStartEventArgs <TControl, T>(parent, item, itemIndex, _mouseDownLocation));

                            DragDropItem <TControl, T> dragDropItem = new DragDropItem <TControl, T>(parent, item, itemIndex, _mouseDownLocation);
                            DragDropEffects            effects      = parent.DoDragDrop(dragDropItem, DragDropEffects.Move);

                            OnDragEnd(new DragEndEventArgs <TControl, T>(parent, item, itemIndex, _mouseDownLocation, Control.MousePosition, effects));

                            ClearDragDrop();
                        }
                        else
                        {
                            ClearDragDrop();
                        }
                    }
                }
            }