我有一个 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/