如何减少ComboBox的DropDownHeight?

时间:2011-07-26 10:20:48

标签: c# .net winforms autocomplete combobox

我通过扩展WinForm组合框实现了自动重现。我现在要做的是在输入时减少下拉高度。

我尝过这样的话:

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

(什么?它们看起来一样;它们都被放下了物品清单!)

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

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

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

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

但是,当然,因为这是Windows,如果你愿意弄脏你的话,有办法解决你的问题。自动完成建议列表仍然是一个窗口,因此它仍然有一个窗口句柄,Windows将允许您操作几乎任何可以获取句柄的窗口。我不一定建议这样做,所以我会留下你on your own来解决问题。请记住,当这样的功能未曝光时,它通常是未曝光的原因。在未来的Windows版本中,您的黑客可能会破解,其中shell团队重新设计了自动完成功能。非常值得支持麻烦。