【发布时间】:2014-04-02 06:29:17
【问题描述】:
我目前正在编写一个组合框,用我自己的替换建议下拉列表。为此,我创建了一个 ToolStripDropDown,我用一个列表框填充它。当用户在组合框文本字段中键入文本时,此列表框会更新。
我的问题是,如果我将 ToolStripDropDown 的 AutoClose 属性设置为 true,似乎即使文本字段具有焦点,ToolStripDropDown 也会“窃取”很多消息,包括键盘消息。
如果我将 AutoClose 属性设置为 false,则一切正常。但下拉菜单不会关闭,例如,如果用户在组合之外点击。
我想知道自己做“自动关闭”,但我不确定如何实现它。关于如何做到这一点的任何想法?
【问题讨论】:
-
hm 也许你也可以控制焦点或为你的组合框制作一个“KeyPreview”(就像winforms一样)
-
我试过了,但它不起作用。我还尝试捕获所有发送到下拉列表的 WM_KEYDOWN、WM_KEYUP、WM_CHAR 消息并将它们发送回组合的编辑控件(使用 SendMessage),但它也不起作用。
-
一个非常简单但可能很脏的解决方案:
ComboBox.LostFocus -> Toolstripdropdown.Close()可能有效,但我还没有测试过。我认为一个简单的“自动关闭” -
我已经在处理 LostFocus 消息了。如果我点击组合外的父表单,我不会收到任何消息。
-
嗯,我已经测试过了,它在这里工作。你有一些代码如何处理 ComboBox 的 LostFocus 吗?
标签: c# winforms combobox toolstripdropdown