【问题标题】:How Many Rows Can A Listbox Hold? Windows Form Application一个列表框可以容纳多少行? Windows 窗体应用程序
【发布时间】:2011-07-11 12:33:54
【问题描述】:

我的 Access 数据库中有超过 9,00,000 条记录,但只有一小部分显示在列表框中。一个列表框可以容纳多少行?大约 65K 是我从研究中得到的答案。 谢谢!

【问题讨论】:

  • 用户应该如何处理 any UI 元素中的 900k 个条目?
  • 也许你应该重新考虑你的界面。在一个屏幕上向用户显示 90 万条记录是压倒性的,而且可能毫无用处。考虑将要显示的内容缩小到不到一百个更有用的内容。
  • @ Alex K. @ Bueller - 我知道这没有意义。但这是一个小时的需要:)

标签: vb.net winforms


【解决方案1】:

本机列表框控件中存在一个错误,该错误是在 Vista 时引入的,并且在 Win7 中仍然存在。它会阻止您正确滚动超过 65536 + 可见项目数。除了看不到后面的项目之外,该错误最明显的部分是当您将滚动条拖到底部时会跳回。

这个错误不会经常被测试。没有人期望他的用户有足够的耐心来抓取成千上万的项目。这样的程序会很快被卸载。否则,ListBox 容量仅受可用虚拟内存量的限制。如果你真的想追求这个,那么使用 ListView 或 DataGridView。

【讨论】:

【解决方案2】:

我不确定确切的限制是多少(下面提供的 url 给出了一些建议)我认为如果您要填充列表框的项目数量可能会大大降低您的计算机速度.

也许您应该考虑使用不同的控件来允许分页,例如 DataGrid 或类似的东西一次显示 100 个结果?

此链接可能对您有用:http://codeguru.earthweb.com/forum/showthread.php?p=1715288

使用分页创建数据网格:http://support.microsoft.com/kb/305271

【讨论】:

  • 如果我使用数据网格,有没有办法可以将选定的项目移动到不同的文本区域或列表框?
  • 您可以添加代码以突出显示您要选择的行(或使用列中的复选框并检查您要移动的项目),然后单击一个按钮,该按钮将执行 foreach 以循环选定的项目并将它们添加到另一个控件项目源。此链接可能有助于突出显示数据网格中的行support.microsoft.com/kb/195472
【解决方案3】:

我发现在 winforms 中使用 DataGridView 而不是 ListBox 更可取。关键是使用VirtualMode。我会从 DataGridView 派生类似于:

类CustomDgv:DataGridView { 公共CustomDgv(){ this.BackgroundColor = SystemColors.Window; this.BorderStyle = BorderStyle.None; this.Dock = DockStyle.Fill; this.MultiSelect = false; this.AutoGenerateColumns = false; this.RowHeadersVisible = this.AllowUserToResizeRows = false; this.ReadOnly = true; this.AllowUserToAddRows = this.AllowUserToDeleteRows = false; this.CellBorderStyle = DataGridViewCellBorderStyle.None; this.VirtualMode = true; this.SelectionMode = DataGridViewSelectionMode.FullRowSelect; this.RowTemplate.Height = this.FontHeight + this.FontHeight / 2; } }

然后相应地实现虚拟部分。

【讨论】:

    猜你喜欢
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多