无限垂直滚动

3
我有一个WinForms应用程序和一个Panel控件。该面板控件具有用于垂直滚动的VScrollBar控件。除了现在我将VScrollBar的最大值设置为100外,一切都运行正常。问题是,我需要将Maximum属性设置为约40亿,但由于Maximum只是一个整数,因此我无法将其设置为正确的值。那么,我的问题是,如何解决这个问题?我知道有一些文本编辑器和文件查看器可以查看超过4GB的数据,那么在这样的应用程序中,滚动条会如何工作呢?
3个回答

2

你可以将 Maximum 设置为 int.MaxValue,并将检索到的值按比例缩放到实际最大值。这应该具有足够的精度,以避免加载过多的数据。


2
滚动条是一个GUI控件。从本质上讲,它可以显示的步数受限于屏幕上的垂直像素数。因此,将最大值设置为超过此值的任何值仅为开发人员方便起见,以使数学计算更加简单。
应用程序如何处理滚动条?理论上,您需要先解析文件,找出文件中有多少行,并将其用作逻辑最大值。实际上,当打开文件时读取4 GB的数据会影响性能,因此这种方法不可行。
如果我要实现这个功能,我会将滚动条最大值设置为一个较大的值,比如10,000。当使用滚动条时,滚动条值除以10,000以获取百分比,编辑器显示文件的该部分。
不要按照下滑那么多行来考虑事情。相反,将其视为跳转到文件的该百分比偏移量,读取该处的数据并显示。

0

你使用百分比即可,无需将其设置为与行数相同。


这是一个好主意,除了当我在我的滚动处理程序上获取ScrollEventArgs时,它有一个名为NewValue的属性,它是一个int类型。因此,如果它返回给我58,例如,表示58%,那么我如何知道要向下滚动多远?当你谈论总共4GB的大块数据时,58%是相当大的一部分。 - Icemanind
如果您将最大值设置为int.MaxValue,将最小值设置为int.MinValue,那么您应该会非常接近。 - Alex Peck
还要考虑到,除非每行有1个字节的数据,否则即使有4GB的数据,你也会比4十亿行少得多。 - Mike Caron

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