在ObjectListView中获取下一个/上一个项目

7
我的应用程序使用Q和A键来移动到ObjectListView中的下一项,只要用户不使用列标题之一对列表项进行排序,这样就可以正常工作。如果用户已经排序,则按Q / A键会导致列表在列表项中跳来跳去,因为它似乎使用原始顺序而不是当前顺序。因此,我正在寻找解决方案,即使用户已经排序,也允许用户移动到下一项。以下是我目前拥有的代码(仅适用于A键):
if (e.KeyCode == Keys.A)
{
  OLVListItem next = listSession.GetNextItem(listSession.SelectedItem);
  if (next == null)
  {
    return;
  }

  listSession.SelectedObject = (Session)next.RowObject;
  listSession.EnsureModelVisible((Session)next.RowObject);
}

我这里也遇到了同样的问题。另外,在分组后如何获取下一项(GetNextItem)呢? - Vincent Dagpin
有一些方法涉及到根据显示顺序引用项目索引,例如 GetNthItemInDisplayOrder()GetDisplayOrderOfItemIndex(),但我没有成功想出可行的解决方法。 - Rev
1个回答

4

好的,这似乎是有效的。例如,向下滚动显示的项目:

int index = listSession.GetDisplayOrderOfItemIndex(listSession.SelectedItem.Index);
OLVListItem next = listSession.GetNthItemInDisplayOrder(index + 1);

并向上滚动显示的项目:

int index = listSession.GetDisplayOrderOfItemIndex(listSession.SelectedItem.Index);
OLVListItem next = listSession.GetNthItemInDisplayOrder(index - 1);

这对于 TreeListView 不起作用,因为向下可能意味着跳出当前父级。如果在该方向上没有更多的兄弟姐妹,我希望得到一个空或-1返回。 - void.pointer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接