我有以下代码克隆/复制所选的ListView项,删除Selected项,然后将复制的Item重新插入ListView中的新位置。
private void btnUp_Click(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count == 1)
{
int iIndex = listView1.FocusedItem.Index;
if (iIndex > 0)
{
ListViewItem oListViewItem = (ListViewItem)listView1.FocusedItem.Clone();
listView1.Items.Remove(listView1.FocusedItem);
listView1.Items.Insert(iIndex - 1, oListViewItem);
}
}
}
代码工作正常,项目移动并更新列表。但是,我希望新插入的项目保持选中状态。我试过了
listView1.Items [iIndex - 1] .Selected = true;
但这没有产生预期的效果。
我还能尝试什么?
答案 0 :(得分:3)
如果将Selected = true
添加到新插入的项索引中,那么您的代码应该按预期工作。但是当您单击按钮时,焦点将转到按下的按钮,在默认属性下,ListView.HideSelection将设置为True。所以你没有看到任何项目被选中。如果您在表单上按TAB直到ListView再次成为焦点控件,则ListViewItem应显示为已选中。
如果你想显示某种形式的(暗淡的)选择,即使控制没有聚焦,那么设置
listView1.HideSelection = false;
但是,如果我理解你要做的事情(提升项目),那么你应该改变你的代码以使用SelectedItems [0]元素而不是FocusedItem
if (listView1.SelectedItems.Count == 1)
{
int iIndex = listView1.SelectedItems[0].Index;
if (iIndex > 0)
{
ListViewItem oListViewItem = (ListViewItem)listView1.SelectedItems[0].Clone();
listView1.SelectedItems[0].Remove();
listView1.Items.Insert(iIndex -1, oListViewItem);
listView1.Items[iIndex -1].Selected = true;
}
}
答案 1 :(得分:-1)
您可能想尝试使用IndexOf方法获取插入项的索引。
listView.Items[listView.Items.IndexOf(oListViewItem)].Selected = true;
希望这有帮助。