【问题标题】:Winform, mouse click out of popupWinform,鼠标点击弹出
【发布时间】:2016-02-01 20:40:20
【问题描述】:

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

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

【问题讨论】:

  • 显示一些您迄今为止尝试过的示例代码?
  • @Batuta,我不介意粘贴,但事件不会触发,所以事件中的代码无关紧要,我觉得这更像是一个事件问题而不是纯粹的操作方法-代码问题。
  • 除非实际点击表单,否则该事件不会触发。所以在窗口外点击注册比较困难。您将需要注册一个全局挂钩。已经有例子了。另一种方法是使用表单的 LostFocus 事件,并假设如果表单失去焦点,他们点击了它之外。不过,这并非没有限制。
  • 你为什么要这样做?对于您的实际问题,可能有更简单的解决方案。

标签: c# .net winforms


【解决方案1】:

供讨论:

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";
        }
    }

}

【讨论】:

    【解决方案2】:

    您是否考虑过停用事件?这将在表单失去焦点时触发。这可能来自鼠标单击或上下文切换,但可能会提供您想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多