【问题标题】:ToolStrip control never fire Enter/Leave event?ToolStrip 控件永远不会触发 Enter/Leave 事件?
【发布时间】:2010-04-22 00:21:03
【问题描述】:

我在 WinForms 中创建了一个可移动面板。我使用 ToolStrip 作为面板中的标题栏。我将使用 ToolStrip 来移动面板以及指示面板是否“活动”。因此,当面板处于活动状态时,我想将 ToolStrip 的 BackColor 更改为 Red。

更新:面板将承载其他控件,例如列表视图。我希望当托管控件获得焦点时面板显示为“活动”,类似于普通窗口的行为,而窗口成为面板,标题栏成为 ToolStrip。

当面板被视为“活动”时

  1. 托管控件获得焦点
  2. ToolStrip 是 MouseDown/MouseClick
  3. ToolStrip 被鼠标拖动

这个想法是捕获 ToolStrip 的 Enter/Leave 事件来更改颜色,但似乎这些事件从未被触发。

这些事件真的从未被触发吗?我应该捕捉其他事件吗?

【问题讨论】:

  • 面板和 ToolStrip 都不能接收焦点。所以,不,Enter 事件不会运行。 “活跃”是什么意思?

标签: c# .net winforms


【解决方案1】:

mmmm 我猜有几种方法可以做到这一点。

您可以在 IMessageFilter 消息中使用挂钩,并查看它是否在您的工具条/面板上,然后采取相应措施(WM_LBUTTONDOWN、WM_MOUSEMOVE、WM_LBUTTONUP 等 - 请参阅 Windows 消息上的 Windows 文档以获取所有 Windows 消息的十六进制消息代码)。有很多关于的例子——例如:How to detect if the mouse is inside the whole form and child controls?

根据是否激活来设置布尔值,绘制中的覆盖可以允许颜色设置 - 或者简单地将它们与/而不是布尔值一起翻转。移动也一样,设置一个布尔值来表示移动是否有效 - 然后允许 WM_MOUSEMOVE 根据需要移动表单/面板(或不移动)。

【讨论】:

  • 如何在 ToolStripMenuItem 中获取(键盘事件)KeyDown 或 KeyUp 或 KeyPress 事件。即使 GotFoucs 更好...有没有办法检查用户是否使用箭头键 Focus 或 Enter a ToolStripMenuItem? ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
相关资源
最近更新 更多