C#在winform中插入新项目后选择ListView项目

时间:2014-01-28 15:54:25

标签: c# winforms listview

我有以下代码克隆/复制所选的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;

但这没有产生预期的效果。

我还能尝试什么?

2 个答案:

答案 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;

希望这有帮助。