C# ToolStrip控件从不触发进入/离开事件?

C# ToolStrip控件从不触发进入/离开事件?,c#,.net,winforms,C#,.net,Winforms,我在WinForms中创建了一个可移动面板。我使用工具条作为面板中的标题栏。我将使用ToolStrip移动面板,并指示面板是否处于活动状态。因此,当面板处于活动状态时,我想将ToolStrip的背景色更改为红色 更新:面板将承载其他控件,例如listview。我希望当宿主控件获得焦点时,面板显示为活动状态,有点像普通窗口的行为,而窗口成为面板,标题栏成为工具条 当面板被视为激活时 托管控件获取焦点 工具条被鼠标向下移动/鼠标单击 ToolStrip正在被鼠标拖动 其想法是捕获ToolStrip的

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

更新:面板将承载其他控件,例如listview。我希望当宿主控件获得焦点时,面板显示为活动状态,有点像普通窗口的行为,而窗口成为面板,标题栏成为工具条

当面板被视为激活时

托管控件获取焦点 工具条被鼠标向下移动/鼠标单击 ToolStrip正在被鼠标拖动 其想法是捕获ToolStrip的Enter/Leave事件以更改颜色,但这些事件似乎从未触发


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

嗯,我想有几种方法可以做到这一点

您可以使用钩子插入IMessageFilter消息,查看它是否在工具条/面板上,然后相应地执行WM_LBUTTONDOWN、WM_MOUSEMOVE、WM_LBUTTONUP等操作-有关所有windows消息的十六进制消息代码,请参阅windows消息的windows文档。有很多关于的例子,例如:


根据是否处于活动状态设置布尔值,绘制中的替代可以允许颜色设置,或者只需将它们与/而不是布尔值一起翻转即可。与移动相同,为“移动活动/或不活动”设置布尔值,然后允许WM_MOUSEMOVE根据需要移动窗体/面板或不移动面板。

面板和ToolStrip都不能接收焦点。因此,不,Enter事件不会运行。active是什么意思?如何在ToolStripMenuItem中获取键盘事件KeyDown、KeyUp或KeyPress事件。。即使是GotFoucs也更好。。。有没有办法检查用户是否使用箭头键聚焦或输入ToolStripMenuItem??