【发布时间】:2016-09-29 08:10:53
【问题描述】:
我有一个自定义组合框,当您单击组合框的箭头时,它会打开一个单独的控件。当您失去 ComboBox 的焦点时,我想调用“LostFocus”事件处理程序来关闭自定义控件。
如果您单击另一个控件(例如文本框),这可以正常工作,但是如果您单击表单的背景,则不会触发。
我想模仿当您单击关闭并关闭普通组合框的下拉菜单时的功能。
【问题讨论】:
-
也许是因为在你移动到另一个控件之前它没有失去焦点,为什么不使用 dropdownclose 事件?
-
这是设计使然。只有在实际失去焦点时才能获得 LostFocus(首选离开)。工具箱中有大量不想要焦点的控件。像 PictureBox、Panel 等。和形式。它的子控件获得焦点,就像您的自定义 ComboBox 一样。这就是下拉菜单不能以这种方式工作的原因,它们使用 Capture 属性。这确保即使鼠标不在窗口内,您也可以看到鼠标事件。
-
我已经尝试过 dropdownclose,但是我没有将下拉菜单作为自定义控件打开,因此请禁用下拉菜单。我确实尝试将其保持打开状态,但我需要单击打开的另一个控件,当我不想要的下拉菜单打开时,它会自动触发。我需要一个在您单击背景时触发的事件,但找不到。或者也许只是调用与关闭下拉菜单时相同的名称?
-
@HansPassant,我确实尝试了 Capture 属性,但无法完成这项工作,你有什么简单的例子可以提供给我正确的方向吗?
-
你做错了,我们看不到你做错了。简单的例子从来没有那么有用,通常是因为你想做的事情并不简单。这就是你最终做错的方式。而且太简单了,只需要 MouseDown 检测到窗口矩形外的点击,MouseCaptureChanged 检测系统取消捕获。 stackoverflow.com/help/mcve
标签: c# winforms combobox lost-focus