C#ListView DragDrop重新排序不起作用
我正在尝试实现一个C#ListView DragDrop重新排序不起作用,c#,winforms,listview,drag-and-drop,C#,Winforms,Listview,Drag And Drop,我正在尝试实现一个ListViewItems的DragDrop,以重新排列我的列表 该列表不会像我预期的那样重新排序或移动项目 代码 private void lstModules_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(ListViewItem))) { lstModules.Alignment = ListVi
ListViewItems
的DragDrop
,以重新排列我的列表
该列表不会像我预期的那样重新排序或移动项目
代码
private void lstModules_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(ListViewItem)))
{
lstModules.Alignment = ListViewAlignment.Default;
if (lstModules.SelectedItems.Count == 0)
return;
var p = lstModules.PointToClient(new System.Drawing.Point(e.X, e.Y));
ListViewItem MovetoNewPosition = lstModules.GetItemAt(p.X, p.Y);
if (MovetoNewPosition == null)
return;
ListViewItem DropToNewPosition = (e.Data.GetData(typeof(ListView.SelectedListViewItemCollection)) as ListView.SelectedListViewItemCollection)[0];
ListViewItem CloneToNew = (ListViewItem)DropToNewPosition.Clone();
int index = MovetoNewPosition.Index;
lstModules.Items.Remove(DropToNewPosition);
lstModules.Items.Insert(index, CloneToNew);
lstModules.Alignment = ListViewAlignment.SnapToGrid;
}
}
private void lstModules_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(ListView.SelectedListViewItemCollection)))
{
e.Effect = DragDropEffects.Move;
}
}
private void lstModules_ItemDrag(object sender, ItemDragEventArgs e)
{
lstModules.DoDragDrop(lstModules.SelectedItems, DragDropEffects.Move);
}
最近我做了这个代码,试试这个
private ListViewItem tempItem = null;
private void lvTables_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Application.DoEvents();
tempItem = lvTables.GetItemAt(e.X, e.Y);
string sData = tempItem.Text + ":" + tempItem.Name;
DragDropEffects effect = DoDragDrop(sData, DragDropEffects.Move);
lvTables.Refresh();
}
}
private void lvTables_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.StringFormat))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
}
private void lvTables_DragOver(object sender, DragEventArgs e)
{
if (tempItem != null && lvTables.Items.Contains(tempItem))
{
Application.DoEvents();
int iIndex = -1;
try
{
Point p = lvTables.PointToClient(new Point(e.X, e.Y));
iIndex = lvTables.GetItemAt(p.X, p.Y).Index;
}
catch
{ }
if (iIndex > -1 && iIndex != tempItem.Index)
{
if (lvTables.Items.Contains(tempItem))
lvTables.Items.Remove(tempItem);
lvTables.Items.Insert(iIndex, tempItem);
tempItem.Selected = true;
}
}
}
private void lvTables_MouseUp(object sender, MouseEventArgs e)
{
if (tempItem != null)
{
lvTables.SelectedItems.Clear();
tempItem.Selected = true;
tempItem = null;
}
}