C#在winform中插入新项后设置ListView项已选中

C#在winform中插入新项后设置ListView项已选中,c#,winforms,listview,C#,Winforms,Listview,下面的代码克隆/复制选定的ListView项,删除选定项,然后将复制的项重新插入ListView中的新位置 private void btnUp_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count == 1) { int iIndex = listView1.FocusedItem.Index; if (iIndex > 0) {

下面的代码克隆/复制选定的ListView项,删除选定项,然后将复制的项重新插入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

但这并没有达到预期的效果


我还可以尝试什么?

如果您将
Selected=true
添加到新插入的项目索引中,那么您的代码应该可以正常工作。但是,当您单击按钮时,焦点转到按下的按钮,并且在默认属性下,该属性设置为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;
    }
}

您可能希望尝试使用IndexOf方法获取插入项的索引

listView.Items[listView.Items.IndexOf(oListViewItem)].Selected = true;

希望这能有所帮助。

太好了,这是我的问题,我当时正试图将物品向上移动。非常感谢。