【发布时间】:2011-08-14 06:44:37
【问题描述】:
我有一个 Windows 窗体应用程序,当窗体被激活、停用或 SizeChanged 时,窗体会执行一些操作。比较具体。例如:
Form Activated:将变量isActive 设置为true,并将输入集中到输入框,以便某人也可以输入内容。
Form Deactivated:将变量isActive设置为false,这样应用程序中的任何焦点变化(由远程机器消息、聊天消息等引起)都不会从其他人那里窃取焦点应用程序。
现在,我在 Form Activated 事件中使用了我的 webBrowser1.Focus() 命令,这并不理想,因为当您单击任务栏图标时,它会尝试最小化,但由于它会重新集中在网络浏览器上,然后再次恢复/激活表单。
我在 Stack Overflow 上搜索了一下,发现如下信息:
针对以下信息进行了编辑:
我确实在 Stack Overflow 上的另一篇文章中找到了这些信息:
protected void OnActivateApp(bool activate)
{
Console.WriteLine("Activate {0}", activate);
}
protected override void WndProc(ref System.Windows.Forms.Message m)
{
// Trap WM_ACTIVATEAPP
if (m.Msg == 0x1c) OnActivateApp(m.WParam != IntPtr.Zero);
base.WndProc(ref m);
}
但行为与我在上述 2 个事件中看到的问题相似。当任务栏图标被点击时,表单会捕捉到 Deactivated:
激活错误
但马上,它会这样做:
激活真
看起来,当您使用任务栏按钮最小化一个窗口时,它仍然保持为“焦点”应用程序,直到您单击另一个应用程序。
其中一个帖子确实建议我捕获表单的 GotFocus,但是我找不到 GotFocus 的表单级别的事件,因为 GotFocus 是从控件派生的,而不是应用程序形式。
问题:如何使用任务栏按钮最小化表单,然后在重新显示表单时,让它执行webBrowser1.Focus() 命令将焦点放在应有的位置是吗?
【问题讨论】:
标签: c# winforms taskbar minimize