c#拖放listview

我有一个列表框,我将其拖入ListView。 现在我在ListView中有组,所以当ListView中的项目被删除时,它必须在该组下添加它。

这是处理丢弃的代码。

private void lstvPositions_DragDrop(object sender, DragEventArgs e) { var group = lstvPositions.GetItemAt(eX, eY); var item = e.Data.GetData(DataFormats.Text).ToString(); lstvPositions.Items.Add(new ListViewItem {Group = group.Group, Text = item}); } 

我没有找到可以给groupitem的函数,所以我使用了GetItemAt,我也可以从中访问listviewgroup。

但是GetItemAt总是返回null。

难道我做错了什么? 有没有更好的方法来实现这一目标?

首先,我假设您使用的是ListView,而不是ListBox,因为ListBox不包含GetItemAt成员。

要解决您的问题,请将点转换为本地坐标:

 private void lstvPositions_DragDrop(object sender, DragEventArgs e) { var localPoint = lstvPositions.PointToClient(new Point(eX, eY)); var group = lstvPositions.GetItemAt(localPoint.X, localPoint.Y); var item = e.Data.GetData(DataFormats.Text).ToString(); lstvPositions.Items.Add(new ListViewItem {Group = group.Group, Text = item}); }