c# - 确定程序是否为 .NET 中的事件窗口

标签 c# .net user-interface active-window

我有一个 C#/.NET 应用程序,我想实现以下行为:

我有一个弹出菜单。每当用户单击应用程序中不是弹出菜单的任何内容时,我希望弹出菜单关闭。

但是,只要用户不在应用程序中,我就不希望发生任何事情。

我试图通过 LostFocus 事件来管理它,但我无法确定我的应用程序是否是事件窗口。代码看起来像这样。

    private void Button_LostFocus(object sender, System.EventArgs e)
    {
        if (InActiveWindow()) {
           CloseMenu()
        }
        else {
           // not in active window, do nothing
        }
    }

我需要知道的是如何实现 InActiveWindow() 方法。

最佳答案

您可以 P/Invoke 到 GetForegroundWindow() , 并比较返回到应用程序的 form.Handle 属性的 HWND。

获得句柄后,您还可以 P/Invoke GetAncestor()获取根所有者窗口。这应该是您应用程序主启动窗口的句柄,如果它在您的应用程序中。

关于c# - 确定程序是否为 .NET 中的事件窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/893669/

相关文章:

c++ - 在水平布局中垂直居中标签

jquery - will_paginate + jquery ui 选项卡

c# - 使用 LINQ TO SQL 将查询转换为对象

c# - 在页面之间传递 session 变量

c# - AutoMapper 在验证期间抛出 "No default constructor"

.net - 在 .NET 中以编程方式检索数据库表创建脚本

c# - 等效于 C# 中的 PostMessage 以使用 MVVM 与主线程同步?

c# - 将 JSON 对象属性反序列化为字符串

c# - 如何在 C# 中解析复杂的嵌套 JSON 字符串?

c# - 访问类的私有(private)成员