当前位置:  开发笔记 > 编程语言 > 正文

WinForms ListView,记住Reload上的滚动位置

如何解决《WinFormsListView,记住Reload上的滚动位置》经验,为你挑选了2个好方法。

我有一个列表视图,我正在填充8列用户数据.用户可以选择启用自动刷新,这会导致ListView被清除并使用数据库中的最新数据重新填充.

问题是当项目被清除并重新填充时,可见区域会跳回到列表的顶部.因此,如果我正在查看2000年的第1000项,那么回到那个项目是非常不方便的.

基本上,我要问的是,如何获得当前的滚动距离(x和y),然后恢复它们?



1> TheAgent..:

我只是想为那些拼命尝试使用有缺陷的ListView.TopItem属性的人提供一些信息:

    您必须在调用ListView.EndUpdate后设置TopItem属性

    ListView控件的项必须将其Text属性设置为String.Empty以外的其他属性,否则该属性将不起作用.

    设置ListView.TopItem会间歇性地抛出空引用异常.始终将此行代码保留在Try ... Catch块中.

当然,这会导致ListView的滚动条跳转到0并返回到顶部项目的位置,这很烦人.如果您找到此问题的解决方法,请更新此问题.



2> Dave Lucre..:

我成功使用了以下内容:

int topItemIndex = 0;
try
{
     topItemIndex = listView1.TopItem.Index;
}
catch (Exception ex)
{ }
listView1.BeginUpdate();
listView1.Items.Clear();
//CODE TO FILL LISTVIEW GOES HERE
listView1.EndUpdate();
try 
{ 
    listView1.TopItem = listView1.Items[topItemIndex];
}
catch (Exception ex)
{ }

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有