gpt4 book ai didi

c# - 在 C# 中处理面板内任意位置的单击事件

转载 作者:太空狗 更新时间:2023-10-29 21:36:38 25 4
gpt4 key购买 nike

我的表单中有一个带有点击事件处理程序的面板。我在面板内还有一些其他控件(标签、其他面板等)。如果您单击面板内的任意位置,我希望注册单击事件。只要我不单击面板内的任何控件,单击事件就会起作用,但无论您在面板内的哪个位置单击,我都想触发该事件。如果不向面板内的所有控件添加相同的点击事件,这是否可能?

最佳答案

从技术上讲这是可能的,尽管它非常丑陋。您需要在将消息发送到被单击的控件之前捕获该消息。您可以使用 IMessageFilter 执行此操作,您可以嗅探在分派(dispatch)之前从消息队列中删除的输入消息。像这样:

using System;
using System.Drawing;
using System.Windows.Forms;

class MyPanel : Panel, IMessageFilter {
public MyPanel() {
Application.AddMessageFilter(this);
}
protected override void Dispose(bool disposing) {
if (disposing) Application.RemoveMessageFilter(this);
base.Dispose(disposing);
}
public bool PreFilterMessage(ref Message m) {
if (m.HWnd == this.Handle) {
if (m.Msg == 0x201) { // Trap WM_LBUTTONDOWN
Point pos = new Point(m.LParam.ToInt32());
// Do something with this, return true if the control shouldn't see it
//...
// return true
}
}
return false;
}
}

关于c# - 在 C# 中处理面板内任意位置的单击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3926644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com