【问题标题】:How can I reduce the DropDownHeight of a ComboBox?如何减少组合框的 DropDownHeight?
【发布时间】:2011-10-13 07:14:09
【问题描述】:

我通过扩展 WinForm 组合框实现了自动完成功能。我现在要做的是减少打字时的下拉高度。

我尝试过类似的东西:

this.DropDownHeight = this.ItemHeight * this.Items.Count

KeyUp事件处理程序的末尾,但结果很奇怪。

我该如何解决这个小问题?

【问题讨论】:

  • 身高降低的标准是什么?
  • 这是为了减少显示的项目数量的高度
  • 科迪对此给出了深刻的见解..投了同样的票

标签: c# .net winforms autocomplete combobox


【解决方案1】:

DropDownHeight 属性控制组合框下拉时的高度。

(是的,你说,这很明显!)

但这与自动完成建议列表相同。

(什么?它们看起来一样;它们都是下拉列表!)

是的,他们是。但是它们在幕后的实现方式完全不同。下拉组合框与下拉部分永久显示在屏幕上的“完整”组合框(WinForms 中称为“简单”的样式)相同。唯一的区别是,对于“DropDown”或“DropDownList”样式,下拉部分是隐藏的,只有在用户请求时才显示。 (A comparison of various combo box styles.) 这种风格的初衷是为了节省屏幕空间,但现在它变得如此流行,以至于每个人都改用它,即使屏幕空间不再是一个问题。

这意味着下拉项目列表没有改变。 Windows 不会重复使用相同的下拉列表来显示自动完成建议。这是根据需要创建和销毁的完全不同的弹出窗口。最大的问题是自动完成建议列表是可调整大小的。它有一个在角落里调整抓手的大小。常规的下拉列表没有这个,所以它们显然不能是一回事。从技术上讲,自动完成建议列表由 shell IAutoCompleteInterface 实现,与所有编辑控件使用的相同。 (在 this one 之类的错误中发现了另一个死掉的赠品。)

所以您实际上需要更改自动完成建议列表的下拉高度!但不幸的是,WinForms 并没有为此公开任何属性。

因此有理由得出结论,您可能一开始就不应该这样做。允许用户根据自己的选择调整自动完成建议框的大小。这就是调整大小抓手的用途。他们选择的最后一个尺寸会被记住并重复使用。始终尊重用户,即使您的设计部门认为他们可以做得“更好”。

当然,由于这是 Windows,如果您愿意亲自动手,有一种方法可以解决您的问题。自动完成建议列表仍然是一个窗口,因此它仍然有一个窗口句柄,并且 Windows 将允许您操作几乎任何您可以获得句柄的窗口。我不一定建议这样做,所以我会留给你on your own 来破解解决方案。请记住,当这样的功能未公开时,通常是出于某种原因而未公开。您的 hack 很可能会在未来版本的 Windows 上中断,shell 团队会在其中重新配置自动完成功能。几乎不值得支持麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    相关资源
    最近更新 更多