我有一个带有拖放功能的ListView。我希望拖放后拖动的项目保持选中状态。
我有这个代码(用于拖放)
private void commandListView_DragDrop(object sender, DragEventArgs e)
{
Point point = commandListView.PointToClient(new Point(e.X, e.Y));
int index = 0;
try
{
index = commandListView.GetItemAt(point.X, point.Y).Index;
}
catch (Exception)
{
}
if (index < 0)
{
index = commandListView.Items.Count - 1;
}
ListViewItem data = e.Data.GetData(typeof(ListViewItem)) as ListViewItem;
commandListView.Items.Remove(data);
commandListView.Items.Insert(index, data);
}
我试着用这个来再次选择项目,但是不起作用
data.Selected = true;
data.Focused = true;
然后,我进行了测试,看看是否可以将焦点放在ListView中的第一项上
commandListView.Items[0].Selected = true;
commandListView.Items[0].Focused = true;
但是它也不起作用,选定的项目不会改变。它总是拖放之前拖动的项目所在的旧索引。
附言我用的是WinForms
@更新
我已经试过用
commandListView.Focus();
但没有成功
为了澄清拖放是在同一个ListView中发生的,我拖动项来更改它们的顺序。
2条答案
按热度按时间cnjp1d6j1#
我找到了解决办法;我正在使用MouseDown事件启动DragDrop操作。
现在我使用ItemDrag事件,一切都很好,实际上我甚至不需要聚焦项目,它是自动完成的。
py49o6xq2#
对于那些仍在努力寻找解决方案的人:
这个应该够了...