C# Winform,鼠标单击弹出窗口

C# Winform,鼠标单击弹出窗口,c#,.net,winforms,C#,.net,Winforms,我有一个小的弹出窗口,我想在窗口外单击鼠标时触发事件 我尝试在OnMouseClick上启动它,并检查鼠标光标是否超出弹出边界,但它似乎没有触发超出弹出边界。您考虑过停用事件吗?这将在窗体失去焦点时触发。这可能是通过鼠标单击或上下文切换实现的,但可能会提供您想要的内容。有关讨论: public partial class FrmPopup : Form { public FrmPopup() { InitializeComponent(); } con

我有一个小的弹出窗口,我想在窗口外单击鼠标时触发事件


我尝试在OnMouseClick上启动它,并检查鼠标光标是否超出弹出边界,但它似乎没有触发超出弹出边界。

您考虑过停用事件吗?这将在窗体失去焦点时触发。这可能是通过鼠标单击或上下文切换实现的,但可能会提供您想要的内容。

有关讨论:

public partial class FrmPopup : Form {

    public FrmPopup() {
        InitializeComponent();
    }

    const uint WM_NCACTIVATE = 0x0086;

    protected override void WndProc(ref Message m) {
        base.WndProc(ref m);
        if (m.Msg == WM_NCACTIVATE && m.WParam == IntPtr.Zero) {
            if(!ClientRectangle.Contains(PointToClient(Control.MousePosition)) && MouseButtons == MouseButtons.Left)
                label1.Text = "Clicked outside of window";
        }
    }

}

显示一些您到目前为止尝试过的示例代码?@Batuta,我不介意粘贴,但事件不会触发,因此事件中的代码是不相关的,我觉得这更像是一个事件问题,而不是单纯的如何编码问题。除非实际单击表单,否则事件不会触发。因此,在窗口外单击更难注册。你需要注册一个全局钩子。已经有例子了。另一种方法是使用表单的LostFocus事件,并假设如果表单失去焦点,它们会在表单之外单击。但这并不是没有限制的。你为什么要这么做?对于您的实际问题,可能有一个更简单的解决方案。