【问题标题】:Winforms control LostFocus event not firing when you click the form background单击表单背景时不会触发 Winforms 控件 LostFocus 事件
【发布时间】: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


【解决方案1】:

Form 级别获取bool 变量,并在组合框输入(GotFocus)事件. InLeave(LostFocus)event ofcombobox, make itfalse`期间使其成为true

订阅Form MouseClick 事件并检查此事件中的bool 变量。如果 true ,请在此处调用组合框离开事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 2020-02-20
    • 2012-01-19
    相关资源
    最近更新 更多