c# - 如何聚焦模式对话框单击 C# 中的通知图标?

标签 c# winforms dialog focus modal-dialog

我的应用程序的通知图标相应地显示和隐藏主应用程序窗口。但是,当模式对话框打开时(这可以是“关于”对话框或“设置”对话框,仅举几例)我希望模式对话框获得焦点而不是显示/隐藏主应用程序窗口。

模态对话框使用 form.ShowDialog(this) 打开。假设我使用该代码打开“关于”窗口,然后在不关闭它的情况下转到另一个应用程序。当我回来时,如果我单击通知图标,我希望我的应用程序获得焦点。更好的是,我希望模态对话框获得焦点,因为它是模态的,无论如何我都不能使用父窗体。

如果打开任何表单(关于、设置等),我会使用一个简单的 bool 变量进行跟踪,当我单击通知图标时,我会检查该变量。如果是这样,我会执行类似 mainForm.Activate() 的操作。这实际上将主窗体和模态对话框带到了前面,唯一的问题是它没有聚焦模态对话框。

如果不跟踪打开了哪个模态对话框并在其上调用 .Activate(),我该如何解决这个问题?因为那会很痛苦...

最佳答案

当主窗口激活时,您是否在模态对话框中收到 Activate() 事件?如果是这样,请将 SetFocus 调用到那里的模态。

如果没有,那么当您在主窗口中获得 Activate 事件时,检查该(或任何)对话框是否打开并调用它的 Activate 或如果合适直接调用 SetFocus。

IOW,因为您在主窗口中获得 Activate 事件,所以通过函数调用将其传播到模态对话框。

IMO,试图让所有这些在没有直接干预的情况下工作将比直接进行工作更多痛苦。

HTH

关于c# - 如何聚焦模式对话框单击 C# 中的通知图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3488000/

相关文章:

c++ - 在不连接按钮的情况下手动关闭 Modal QDialog - 代码完成后对话框挂起

c# - IEnumerable<string> 到 FileStreamResult 的 Stream

c# - 在非 c# 文件中的 dotnet 新模板中添加可选内容

vb.net - 如何防止按 Enter 键结束 DataGridView 中的 EditMode?

c# - Windows 窗体中的圆形单选按钮列表

C# Windows 窗体自动关闭

android - 关闭 fragment backPress 上的不可取消对话框 - Android

c# - dotnet 发布与/p :PublishProfile=?

c# - 在父表中插入值时自动在子表中生成id

c++ - Qt (C++) 将变量从对话框传递到 main.cpp