C#设置ListView项目在Winform中插入新项目后选择



我拥有以下代码,这些代码/使所选列表视图项目复制,删除所选项目,然后将复制的项目重新插入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添加到新插入的项目索引中,则您的代码应按预期工作。但是,当您单击按钮时,焦点将转移到按下按钮,在默认属性下,listView.HIDESELECTION设置为true。因此,您看不到任何项目。如果您按表格上的选项卡,直到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;
    }
}

您可能需要尝试使用索引方法获取插入项目的索引。

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

希望这会有所帮助。

最新更新