C#ObjectListView-手动设置SelectedObject

本文关键字:SelectedObject 设置 C#ObjectListView- | 更新日期: 2023-09-27 18:20:37

此代码不会在ObjectListView:中设置SelectedObject

int ID = 1; // unique
foreach (object o in ObjectListViewInstance.Objects)
{
    if (o.ID == ID)
    {
        this.ObjectListViewInstance.SelectedObject = o;
        break;
    }
}

我做错什么了吗?

C#ObjectListView-手动设置SelectedObject

ObjectListView对它正在处理的对象一无所知,因此首先必须将ObjectListView.Objects强制转换为您正在使用的类型myObjectType。然后,您可以使用一些不错的LINQ功能直接找到正确的对象,而无需遍历所有对象。最后,您可以让ObjectListView选择项目。

int ID = 1; // unique
myObjectType selectItem =
    this.ObjectListViewInstance.Objects.Cast<myObjectType>().FirstOrDefault(o => o.ID == ID);
if (selectItem != null) 
{ 
    this.ObjectListViewInstance.SelectObject(selectItem); 
}

还请记住,ListViewObjectListView控件具有HideSelection属性,如果列表视图没有焦点,则默认情况下会隐藏高亮显示。

我不知道你的意思,但SelectedObject属性适用于我。它实际上选择了项目,但没有突出显示它(将背景更改为另一种颜色)。

ListViewItem.SelectedListViewObjectItems实际上是普通的ListViewItems)可以做到这一点,所以Selected属性可能正是您所需要的:

int ID = 1; // unique
int index = 0;
foreach (object o in ObjectListViewInstance.Objects)
{
    if (o.ID == ID)
        break;
    index++;
}
this.ObjectListViewInstance.Items[index].Selected = true;

如果您想取消选择其他项目(因为它不会删除其他项目的选择),您可以使用this.ObjectListViewInstance.SelectedObject = this.ObjectListViewInstance.Objects[index],也可以手动取消选择。

此外,如果ObjectListViewInstance还没有聚焦,您可能需要将其聚焦。

附言:可能有一些本机方法可以从绑定对象中找到相应的ListViewItem,但我不知道。如果ObjectListView使用棘手的虚拟化,使ItemsObjects集合不同步,可能会有一些问题。