【问题标题】:Maximum Combobox items in Windows FormsWindows 窗体中的最大组合框项
【发布时间】:2011-09-28 13:35:06
【问题描述】:

我需要一个可以包含大量项目(大约 700 个)的组合框,但组合框可以包含多少个项目(100 个!)似乎有限制。有没有办法可以扩展这个限制?

更新:

我无法真正解释这里的范围,但搜索框不合适。

如果 MaxDropDownItems 设置为 10 并包含 20 个项目,它会提供一个滚动条来访问其他 10 个项目,但不清楚如果超过 100 个项目会发生什么。

不幸的是,它并不像在其中塞入 100 多个项目那么简单,因为它是基于数据库填充的。但是,幸运的是,我们有一个测试团队!

我会在适当的时候发布测试结果。

【问题讨论】:

  • 这个组合框的用途是什么?我认为 700 个项目对于用户滚动浏览来说有点过多。
  • 我同意,但这是一个要求,该框实际上是一个名为 CheckedComboBox 的用户控件,因此可以选择任意数量的项目。大多数情况下不会有 700 个,但需要支持这个
  • 用 foo 值填充组合框来测试非常简单:for (int i = 0; i <= 150; i++) { comboBox.Items.Add(i.ToString()); }

标签: c# winforms combobox


【解决方案1】:

ComboBox 可以轻松包含数千个项目。您所指的 100 限制是出现 ComboBox 下拉菜单时显示的可见部分。

请注意,性能与ComboBox 中填充的数据类型有关;一个复杂的对象与一个简单的字符串值。 WinForms 不像 WPF/SL 中那样存在项目的虚拟化。

【讨论】:

    【解决方案2】:

    正如 GvS 所指出的,MaxDropDownItems 属性是显示下拉部分时可见项目的最大数量。

    因此显示 700 个项目(尽管对您的用户来说不是很好)将是可能的。

    您可以使用如下AutoCompleteMode 属性来启用过滤:

    AutoCompleteStringCollection collection = new AutoCompleteStringCollection();
    for (int i = 0; i < 1000; i++)
    {
        string item = string.Format("Item {0}", i.ToString());
        collection.Add(item);
        comboBox1.Items.Add(item);
    }
    
    comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
    comboBox1.AutoCompleteCustomSource = collection;
    

    【讨论】:

    • 那个属性只允许最大100,我需要它接近1000!
    • 这个属性是关于显示的项目数(在它开始滚动之前),它没有设置列表中的最大项目数。
    • 有趣,从未见过 AutoCompleteMode 属性,但不支持文本输入
    【解决方案3】:

    组合框的 UI 并非旨在让用户从 1000 个元素的列表中进行选择。我个人认为组合框中的 20 个项目已经太多了。但如果要添加 700 项,则没有技术限制。

    如果您选择可以更轻松地选择项目的东西,您的用户会更开心。 (提示:带有搜索框的东西)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多