【发布时间】:2011-11-11 20:11:33
【问题描述】:
我的应用程序没有主窗体。在 Program.Main() 中完成初始化,然后调用 Application.Run()。
当用户在不同的应用程序中时,他们按下键盘快捷键会在我的应用程序中触发以下内容:
- 实例化我的表单。
- 显示表格。
- 调用 win32 API GetForegroundWindow() 找出哪个窗口处于活动状态。
- 做一些事情。
- 调用form.Close()
- 设置表单 = null
我可以执行上述几次,一切都很好。但是,如果我的应用程序在任何时候调用 MessageBox(),那么所有对 GetForegroundWindow() 的后续调用都将返回已关闭的表单,即使当前焦点位于不同的应用程序中也是如此。如果 CredUIPromptForCredentials() 提示用户输入登录名和密码,也会发生这种情况。调用 ProcessInfo.GetActiveProcess() 还会返回我的进程,而不是其他具有焦点的应用程序。
知道我可能做错了什么吗?有什么我可以调用的东西来从我的应用程序中移除焦点吗? SetForeGroundWindow 的反面?
编辑 1
它实际上是一个非模态表单,而不是一个对话框。我正在使用不带参数的 Show() 来显示表单。我尝试在 Close() 之后调用 Dispose() 但行为是相同的。如果我从未在表单上调用 Show(),我确认该应用程序可以正常工作。除了更改标题之外,该表单具有您在 VS2010 中创建它时获得的所有默认值。表单只包含一个标签。
【问题讨论】:
-
这是什么风格的窗口?
标签: c#