让点击事件“穿透”面板

3
我有一个放置在控件下方的表单面板。我将使用该面板绘制从黑色到透明的渐变,以模拟控件投射的阴影。然而,在面板下方还有其他控件,并且面板会捕捉本应传递给其下方面板的点击事件。
如何使点击事件“穿透”面板并传递给其下方的面板?我不想覆盖整个消息处理程序。我也可以接受关于如何实现阴影的其他建议。

面板可以放在后台吗(即所有控件的底部)? - soandos
@soandos 不,它必须直接出现在菜单栏下方。然后其他控件也会直接出现在菜单栏下方。 - Seth Carnegie
你不想覆盖的正是使其工作所需的内容。小心你所要求的。 - Hans Passant
2
还有其他方法吗?我只是在问而已。 - Seth Carnegie
2个回答

1

很遗憾,点击事件不会像那样穿透(即如果您在表单上设置了一个点击处理程序并放置了一个按钮,当您单击按钮时,只有按钮的点击处理程序会被触发)。您可以这样级联点击事件:

topPanel_OnClick() { bottomPanel_OnClick(topPanel, EventArgs.Empty); }

显然会增加噪音,但这比点击出现“掉落”行为要好得多,后者会触发一系列事件。


1
иҝҷдёҚжҳҜдҪ жғіиҰҒзҡ„еӨ„зҗҶж–№ејҸгҖӮиҰҶзӣ–WM_NCHITTESTд»Ҙиҝ”еӣһHTTRANSPARENTжҜ”еҲҶеҲ«еӨ„зҗҶйј ж ҮжҢүдёӢгҖҒйј ж ҮжқҫејҖгҖҒйј ж Ү移еҠЁгҖҒйј ж ҮеҚ•еҮ»гҖҒйј ж ҮеҸҢеҮ»зӯүиҰҒе№ІеҮҖеҫ—еӨҡгҖӮ - Ben Voigt

1
在WPF中,您可以将IsHitTestVisible设置为false以实现您想要的效果,但是在WinForms中,每个控件都有自己的窗口,因此您必须自己冒泡事件。

谢谢您提供这个小技巧 - 我一直在尝试找到在WPF中实现它的方法,本来还打算自己发一个问题,结果看到了这个。 - Laura Huysamen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接