ToolStrip控件永远不会触发Enter / Leave事件?

时间:2010-04-22 00:21:03

标签: c# .net winforms

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

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

当面板被视为“活跃”时

  1. 托管控制获得焦点
  2. ToolStrip是MouseDown / MouseClick
  3. 用鼠标拖动ToolStrip
  4. 这个想法是捕捉ToolStrip的Enter / Leave事件以改变颜色,但似乎这些事件永远不会被触发。

    这些事件真的从未被解雇过吗?我应该捕获其他事件吗?

1 个答案:

答案 0 :(得分:0)

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

您可以在IMessageFilter消息中使用hook,看看它是否在您的工具条/面板上,然后相应地采取行动(WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_LBUTTONUP等 - 请参阅WIndows消息的Windows文档,了解所有Windows消息的十六进制消息代码)。有很多例子 - 例如:How to detect if the mouse is inside the whole form and child controls?

根据是否激活设置boolen,绘画中的覆盖可以允许颜色设置 - 或者只是将其与/而不是布尔值一起翻转。移动相同,设置一个布尔值来移动活动/不活动 - 然后允许WM_MOUSEMOVE根据需要移动窗体/面板(或不移动)。

相关问题