c# - 如何在C#中检测winform控件外的鼠标点击

标签 c# .net winforms mouseevent mouseclick-event

我有一个自定义控件(自​​定义 ComboBox)。它运行良好,当我按下“箭头按钮”时它会部署,如果我再次按下它它也会部署,但是如果它已部署并且我按下我表单中的任何地方 - 它会关闭但是当我试图打开时它 - 我必须按“箭头按钮”两次。因此,当我在组合框外单击时,我需要检测这一时刻。

打开ComboBox的代码(在ButtonClick中调用)

private void OpenComboBox()       
{
    if (drop_flag)
    {
        ...

        popup.Show(this);
    }
    else
    {
        drop_flag = true;
    }
}

并关闭事件

private void popup_Closed(object sender, ToolStripDropDownClosedEventArgs e)
{
    drop_flag = false;
}

所以,我想要这样的东西

private ClickedOutsideControl()
{
    dropflag = true;
}

最佳答案

那没那么容易。使用基本的 .net,您总是需要某种控件/引用来通过绑定(bind)点击事件来拦截点击。例如,如果您有一个 MDI 父级(主窗口,您可以拦截它的点击)。

另一种方法(使用 windows api)是 Hook inso 系统事件 请参阅以下 stackoverflow 帖子 Global mouse event handler .

但如果你真的需要这个,你应该三思而后行。

关于c# - 如何在C#中检测winform控件外的鼠标点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20840837/

相关文章:

.net - 是否可以在一张大图片上找到并计算所有“猫”?

c# - 为什么要在 WinForm 对话框上使用 InitializeLifetimeService?

c# - 使用 CreateGraphics 而不是自定义绘图的 Paint 事件处理程序时出现绘图故障

c# - Windows 服务与 Winforms/WPF 桌面应用程序

c# - RouteValueDictionary 和 htmlAttributes 之间是否存在冲突?

c# - 使用配置文件中的字符串来初始化泛型

c# - 在 EF Core 中过滤 "include"实体

c# - 跨域事件目录组成员

.net - 隐藏窗口失去窗口的功能

c# - .Net 中字符串(或任何其他对象)的内存使用