Exemple #1
0
        /// <summary>
        ///     ドラッグした項目が領域内で移動した時の処理
        /// </summary>
        protected override void OnDragOver(DragEventArgs e)
        {
            base.OnDragOver(e);

            // ドラッグアンドドロップによる項目入れ替えが許可されていなければ何もしない
            if (!AllowItemReorder)
            {
                return;
            }

            // ExtendedListViewの項目でなければドロップを許可しない
            if (!e.Data.GetDataPresent(typeof(ExtendedListView)))
            {
                e.Effect = DragDropEffects.None;
                return;
            }

            // 挿入マークを表示する
            Point p     = PointToClient(new Point(e.X, e.Y));
            int   index = InsertionMark.NearestIndex(p);

            if (index < 0)
            {
                e.Effect = DragDropEffects.None;
                return;
            }
            e.Effect = e.AllowedEffect;
            Rectangle bounds = GetItemRect(index);

            InsertionMark.AppearsAfterItem = p.Y > bounds.Top + bounds.Height / 2;
            InsertionMark.Index            = index;

            // 挿入位置の項目を表示することで自動スクロールする
            Items[index].EnsureVisible();
        }
        //
        // OnDragOver event handler. Updates the dragged node's ghost image's position
        //
        protected override void OnDragOver(DragEventArgs drgevent)
        {
            base.OnDragOver(drgevent);

            // Cancel if no node is being dragged
            if (_draggedItems == null)
            {
                return;
            }

            // Get actual drop item
            Point controlP = PointToClient(new Point(drgevent.X, drgevent.Y));
            int   index    = InsertionMark.NearestIndex(controlP);

            if (index == -1)
            {
                return;
            }

            InsertionMark.Index = index;

            ListViewItem dropItem = Items[index];//GetItemAt(controlP.X, controlP.Y);

            if (dropItem != _tempDropItem)
            {
                ListViewItemDragEventArgs evArgs = new ListViewItemDragEventArgs(ListViewItemDragEventType.DragOver, ListViewItemDragEventBehavior.PlaceBeforeOrAfterAuto, _draggedItems, dropItem);

                if (DragOperation != null)
                {
                    DragOperation(evArgs);

                    // Cancel the operation if the user specified so
                    if (evArgs.Cancel)
                    {
                        drgevent.Effect = DragDropEffects.None;
                        OnDragDrop(drgevent);
                        return;
                    }
                    if (!evArgs.Allow)
                    {
                        return;
                    }
                }

                drgevent.Effect = DragDropEffects.Move;

                // Dissalow the drag here
                if (!evArgs.Allow)
                {
                    drgevent.Effect = DragDropEffects.None;
                }

                _tempDropItem = dropItem;
            }
        }
        private void lv_DragOver(object sender, DragEventArgs e)
        {
            Point targetPoint = PointToClient(new Point(e.X, e.Y));
            int   targetIndex = InsertionMark.NearestIndex(targetPoint);

            if (targetIndex > -1)
            {
                Rectangle itemBounds = GetItemRect(targetIndex);
                EnsureVisible(targetIndex);

                if (targetPoint.Y > itemBounds.Top + (itemBounds.Height / 2))
                {
                    InsertionMark.AppearsAfterItem = true;
                }
                else
                {
                    InsertionMark.AppearsAfterItem = false;
                }
            }
            InsertionMark.Index = targetIndex;
        }
Exemple #4
0
        protected override void OnDragOver(DragEventArgs drgevent)
        {
            base.OnDragOver(drgevent);
            Point        ptScreen = new Point(drgevent.X, drgevent.Y);
            Point        pt       = PointToClient(ptScreen);
            ListViewItem item     = GetItemAt(pt.X, pt.Y);

            int targetIndex = InsertionMark.NearestIndex(pt);

            if (targetIndex > -1)
            {
                Rectangle itemBounds = GetItemRect(targetIndex);
                if (pt.X > itemBounds.Left + (itemBounds.Width / 2))
                {
                    InsertionMark.AppearsAfterItem = true;
                }
                else
                {
                    InsertionMark.AppearsAfterItem = false;
                }
            }
            InsertionMark.Index = targetIndex;
        }