/// <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; }
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; }