c# - 如何减小 ComboBox 的 DropDownHeight?

标签 c# .net winforms autocomplete combobox

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

我尝试过以下方法:

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

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

如何解决这个小问题?

最佳答案

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

(是的,你说,这是显而易见的!)

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

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

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

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

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

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

但是,当然,由于这是 Windows,如果您愿意亲自动手,就有办法解决您的问题。自动完成建议列表仍然是一个窗口,因此它仍然有一个窗口句柄,Windows 几乎可以让您操作任何可以获得句柄的窗口。我不一定建议这样做,所以我会离开你on your own破解解决方案。请记住,当此类功能未公开时,通常是有原因的。您的黑客攻击可能会在未来版本的 Windows 上遭到破坏,其中 shell 团队会重新设计自动完成功能。几乎不值得为支持带来麻烦。

关于c# - 如何减小 ComboBox 的 DropDownHeight?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6828557/

相关文章:

c# - 如何从一种形式访问一个类到另一种形式

c# - 为什么要在 C# 中对 boolean 值使用 |= 运算符?

c# - 如何使用 P/Invoke SendMessage 设置边距?

具有 IronPython 类型参数的 C# 泛型

c# - 在 C# 中的 Windows 窗体桌面应用程序中显示方程

c# - 在文本框验证事件中,如何忽略对某个按钮的点击?

c# - 使用 WinRT api Windows 8 Metro 应用程序实现图像处理效果?

具有泛型类型参数的类型的 C# 扩展方法

c# - 在 C# 中从 context.httprequest 读取原始数据

c# - 将 TAB 空格插入 TextBox