我在WinForms中创建了一个可移动的面板。我在面板中使用ToolStrip作为标题栏。我将使用ToolStrip移动面板,并指示面板是否“活动”。因此,当面板处于活动状态时,我希望将ToolStrip的BackColor更改为红色。
更新:面板将承载其他控件,如listview。当托管控件获得焦点时,我希望面板显示为“活动”,类似于普通窗口的行为,而窗口成为面板,标题栏成为ToolStrip。
当面板被认为是“活动”时
由鼠标focus
其想法是捕获ToolStrip的Enter/Leave事件以更改颜色,但这些事件似乎从未触发过。
这些事件真的从未被触发过吗?我应该捕捉其他事件吗?
发布于 2012-03-17 10:59:59
嗯,我想有几种方法可以做到这一点。
您可以使用钩子进入IMessageFilter消息,并查看它是否位于您的工具条/面板上,然后相应地操作(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根据需要移动表单/面板(或不移动)。
https://stackoverflow.com/questions/2687454
复制相似问题