c# - 如何使组合框下拉菜单向上绘制

标签 c# winforms combobox

在Winform中,我在表单底部有一个组合框。 当我运行该应用程序时,ComboBox 会向下绘制下拉列表,该列表超出了表单边框。

如何使 ComboBox 下拉列表向上绘制?

提前致谢。

最佳答案

这不是立即的,但您可以做到,我将概述您需要的步骤:

  • 将事件处理程序附加到 ComboBox.DropDown
  • ComboBox 的左侧/底部位置转换为屏幕坐标,并为其添加偏移量(例如,为两个值都+1)。
  • 使用 WindowFromPoint() 获取下拉窗口的句柄(它位于控件下方,这就是 +1 的原因)。
  • 获取放置窗口的边界(您可以根据需要使用CB_GETDROPPEDCONTROLRECTGetWindowRect())。
  • 使用 MoveWindow() 将窗口移动到新位置(ComboBox 顶部 - 下拉窗口高度)。

就这些了

编辑
请注意,您可以合并点 2 和 4,通过单个 SendMessageCB_GETDROPPEDCONTROLRECT 您可以获得该窗口的边界以及用作 WindowFromPoint 参数的位置()。通过这种方式,您不会断言下拉窗口始终向下(不确定窗口何时接触屏幕边界,甚至可能在未来版本中发生变化)。

关于c# - 如何使组合框下拉菜单向上绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12816650/

相关文章:

c# - 如何捕获 Keys.F1 而不管窗体上的焦点控件?

c# - 如何设置默认组合框

java - Android 检查日期更改

c# - 使用 linq 或 xpath 获取 xml 中的所有文本节点

c# - WinForms 中的 HWnd 消息 Hook ?

html - 如何仅使用 CSS 设置 <select> 下拉菜单的样式?

javafx - javafx ComBobox在所选项目值上添加监听器

c# - Web Api - 使用 [FromBody] 属性和 POST 方法时操作参数为空

.net - 为什么 New() 在我继承的控件上触发两次? (winforms)

C# Hook 全局键盘事件 - .net 4.0