c# - 如何以像素增量滚动 DataGridView

标签 c# winforms scroll datagridview panel

我最初的方法是将我的 DataGridView 包含在一个面板内,将其高度设置在面板边界之外,然后更改控制面板的滚动条位置。但是,我刚刚发现我的 DataGridView 中的行数将达到 2000,这迫使我至少将 DataGridView 的大小调整为:

65px (row height) x 2,000 = 130,000px.

DataGridView 控件在我的 64 位机器上的最大允许大小是 65,535。任何人都可以想办法解决这个问题?

最佳答案

嗯,不,你不能两者兼得。 65535 像素的大小限制不是人为的,它是操作系统中的硬限制。根本原因是 WM_VSCROLL message .传递的 LPARAM 参数的值记录为:

The HIWORD specifies the current position of the scroll box if the LOWORD is SB_THUMBPOSITION or SB_THUMBTRACK

HIWORD 是值的高 16 位,LOWORD 是低 16 位。其中只能提供 0 .. Pow(2, 16)-1 = 0..65535 的范围。此限制在其他地方可见,如果您用超过(65535 + 可见)项填充列表框,它会出现不良行为。您无法再滚动到底部。

听起来像是一个非常糟糕的问题,微软当然应该在他们的软件中修复这些可怕的限制。但是不,这不在他们的优先列表中。与 WaitHandle.WaitAny() 无法处理包含超过 64 个项目的数组这一看似奇怪的限制没有什么不同。这是故意的,他们认为是做错了,而不是他们。而你是,一个期望用户必须通过 数千 行信息的用户界面不是一个非常有用或友好的界面。比如说,从 Google 显示数十万查询匹配的方式中得到启发。

关于c# - 如何以像素增量滚动 DataGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29127311/

相关文章:

c# - 在 C# 中打印文本框内容

delphi - 如何禁用 TScrollBox 的滚动到 View 行为?

javascript - 将滚动位置调整到最近的容器

c# - 在 Visual Studio 2012 中设置 ClickOnce 安装文件夹 URL

c# - 如何防止用户在文本框中输入特殊字符?

c# - 从 C# 生成 JavaScript 的好的架构是什么?

C# 创建动态按钮和 onClick 动态事件处理程序

Angular 4 - 当 div 进入视口(viewport)时如何触发动画?

c# - 线程安全的单元测试?

c# - 用整数绑定(bind)下拉列表