【发布时间】:2014-09-17 17:48:17
【问题描述】:
我注意到列表框 winforms 控件中有大量项目的问题。
在这个简单的测试用例示例中,我将 120,000 个字符串添加到列表框中。我最初使用绑定到 listbox.DataSource 的数据表遇到了这种情况,但它也可以通过这种方式重现:
listBox.BeginUpdate();
for(int x = 0; x < 120000; x++)
{
listBox.Items.Add(x);
}
listBox.EndUpdate();
当我单击并从上到下拖动滚动按钮时,释放鼠标后,它会将滚动按钮移动到滚动条的中间。
这是一个屏幕截图,显示了当我将按钮从底部/底部附近放开时的位置(我是精确的,并且鼠标没有超出滚动条的边界)。
如果我现在单击滚动条按钮并将其向下移动到控件长度的 3/4/ 处,它现在会弹回到控件长度向下的大约 1/4 处。
有其他人看到过这个吗?是否有已知的解决方法? (我承认我还没有研究下一点)这个控件是否有像 datagridview 这样的“虚拟模式”动态加载选项,可能会偶然摆脱这个奇怪的小问题?
【问题讨论】:
-
用于拖放的代码
-
还将这个 `listBox.Items.Add(x);` 更改为 `listBox.Items.Add(x.ToString());` 看看它是否能提高效率.. 除了您正在实施以及正确使用 for 循环
-
解决您的多个 cmets:我没有在列表框中使用任何拖放操作。很高兴看到有可用的虚拟模式。您是否偶然知道设置虚拟模式是否可以解决滚动问题?上面的代码 sn-p 是我刚刚敲出来的一个例子。如果我添加整数或字符串,这对滚动问题没有影响。 (我最初的问题发生在一个使用字符串而不是数字的应用程序中)
-
我将您的 Drag 误读为拖放。当您更改代码以添加 x.ToString() 时会发生什么情况,您是否还研究过列表框的大小限制它可以包含的项目数..?
标签: c# winforms listbox scroll