簡體   English   中英

C#設置在Winform中插入新項后選擇的ListView項

[英]C# Set ListView item selected after inserting a new Item in winform

我有以下代碼,用於克隆/復制選定的ListView項目,刪除選定的項目,然后將復制的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;

但這並沒有達到預期的效果。

我還能嘗試什么?

如果將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;
    }
}

您可能想嘗試使用IndexOf方法獲取插入項的索引。

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

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM