我注意到在listbox winforms控件中有大量项目存在问题。
在这个简单的测试用例中,我有120,000个字符串添加到列表框中。我最初使用绑定到listbox.DataSource的数据表遇到了这个问题,但它也可以通过这种方式重现:
listBox.BeginUpdate();
for(int x = 0; x < 120000; x++)
{
listBox.Items.Add(x);
}
listBox.EndUpdate();
当我单击并从上到下拖动滚动按钮时,在我松开鼠标后,它会将滚动按钮移动到滚动条的中间。
这是一个屏幕截图,当我从底部正好/靠近底部时,按钮落地(我是精确的,没有鼠标在滚动条的边界之外)。
如果我现在点击滚动条按钮并将其向下移动3/4 /向下控制器的长度,现在它将回弹到控制长度的1/4左右。
还有其他人看过这个并且有一个已知的解决方法吗? (我承认自己没有进入下一点)这种控制是否具有虚拟模式&#39;像datagridview这样的动态加载选项可能偶然会摆脱这种奇怪的打嗝?
答案 0 :(得分:0)
例如,如果要在首次加载表单时执行此操作,请设置属性及其虚拟大小 使用ListView而不是ListBox
private void Form1_Load(object sender, EventArgs e)
{
listView1.VirtualMode = true;
listView1.VirtualListSize = 12000;
}
答案 1 :(得分:0)
您可以通过提供更好的方法来缩小列表以供选择,从而为您的用户(以及您的表现)提供帮助。
答案 2 :(得分:0)
我注意到,垂直滚动条中内置的列表框只能从滚动位置返回索引,最高可达65535。如果添加的项目超过此值,则会出现滚动问题。但是,垂直滚动条控件没有此问题。最多可以滚动到Int32.Max。我只是使用了垂直滚动条控件,而不是ListBox滚动条中的默认版本
我添加了另一个垂直滚动条(vScrollBar1),并将其放置在列表框的右侧,以覆盖其原始列表框的垂直滚动条。
然后为我创建的垂直滚动条添加以下代码
private void vScrollBar1_Scroll(object sender, ScrollEventArgs e) { listbox.TopIndex =
e.NewValue; }
private void vScrollBar1_MouseEnter(object sender, EventArgs e)
{
vScrollBar1.Maximum = listbox.Items.Count;
}