我的应用程序通知图标相应地显示并隐藏主应用程序窗口。但是,当打开一个模式对话框时(这可以是关于对话框或设置对话框,仅举几例),我想要模态对话框来获得焦点,而不是显示/隐藏主应用程序窗口。如何将焦点的模式对话框点击C#中的通知图标?
模式对话框以form.ShowDialog(this)
打开。假设我用该代码打开关于窗口,然后在不关闭它的情况下移动到另一个应用程序。当我回来时,如果我点击通知图标,我希望我的应用程序能够获得焦点。更好的是,我想要模态对话框来获得焦点原因,因为它是模态的,我无法使用父窗体。
我跟踪一个简单的bool
变量,如果任何窗体(关于,设置等)被打开,当我点击通知图标时,我检查该变量。如果这是真的,我会做一些像mainForm.Activate()
。这实际上将主窗体和模态对话框带到前面,唯一的问题是它不会集中模态对话框。
如何在不跟踪打开哪个模式对话框的情况下解决此问题并致电.Activate()
?导致这将是一种痛苦...
问题是,这些模态对话框中的某些与关于/设置不完全相同。其中一些是我使用的库中的任务对话框,我相信它使用Vista中引入的新的任务对话框API。那些没有Activate事件。 – 2010-08-15 16:27:08
任务对话框是否有一个公共的SetFocus()函数?如果没有,你可以将焦点设置为一个控件,一个按钮,一个文本框,以及对话框中需要关注的任何类型的控件吗?我想你可以通过序号获得控制权;可以说,“第一控制”,所以它将是一个通用的解决方案。也就是说,不是绑定到特定的对话框。 – JustBoo 2010-08-15 16:36:31
不幸的是,没有任何对话框,也没有任何控制需要关注:(但我认为我通过诉诸于Windows API,更具体地使用'SetForegroundWindow()'和'GetWindow()'来解决我的问题。 – 2010-08-15 17:32:38