我不想在此问题上花费更多时间,但如果您有兴趣阅读并知道答案,请回复。提前谢谢。
我有一个Windows窗体应用程序,它以最小化模式启动另一个Windows窗体应用程序,并将ShowInTaskbar设置为False。第一个应用程序有一个Show按钮,使用以下方法显示另一个应用程序。
ShowWindow(WindowHandle, ShowWindowCommands.Normal)
SetForegroundWindow(WindowHandle)
我在第二个应用程序中使用Activate Event在激活时刷新其形式。问题是,激活表单时,激活事件通常不会触发。将显示隐藏的表单并将其激活,但不会调用activate事件处理程序。第一个应用程序是MDI应用程序,但我不知道这将是一个因素。
第二个表单上有一个按钮可以隐藏它。此按钮只调用表单的Hide方法,并不会最小化表单。下次在第一个应用程序上按下“显示”按钮时,将为第二个应用程序触发激活事件。为第二个应用程序将ShowInTask栏设置为True无济于事。最小化而不是隐藏窗口不会阻止在第二次激活应用程序时触发Activate事件。
答案 0 :(得分:0)
我怀疑这是因为Activate event适用于可见的Windows。从MSDN文档(我的重点):
如果此表格处于活动状态,则激活表单会将其显示在前面 应用程序,如果不是,它会闪烁窗口标题 积极的应用。 此方法必须具有该表单 任何影响。要确定应用程序中的活动表单,请使用 ActiveForm属性或ActiveMdiChild属性(如果您的表单是) 在多文档界面(MDI)应用程序中。
作为替代方案,第一个应用程序可以将密钥组合发送到第二个应用程序以触发内容刷新。
答案 1 :(得分:0)
我仍然不确定是什么导致了这个问题,但我能够通过使用以下代码并切换到VisibleChanged事件而不是表单Activated事件来绕过它。
ShowWindow(WindowHandle, ShowWindowCommands.Normal)
ShowWindow(WindowHandle, ShowWindowCommands.Hide)
ShowWindow(WindowHandle, ShowWindowCommands.Normal)
SetForegroundWindow(WindowHandle)
请注意,对于上面的代码,VisibleChanged事件仅触发一次。
答案 2 :(得分:0)
好吧,我放弃试图弄清楚为什么表单的Activated事件处理程序在第一次显示最小化的隐藏窗口并激活时不能可靠地触发。我尝试了我能想到的ShowWindow命令的每个组合。我甚至尝试引入定时器和睡眠,以防这是一个时间问题。每当显示最小化窗口时,Activated事件可能无法可靠地触发,并且其未触发可能与窗口被隐藏的事实无关。我没有测试过这些案例。
以下代码是我每次使用VisibleChanged事件而不是Activate事件时可以使用的唯一代码。
If IsIconic(WindowHandle) Then
ShowWindow(WindowHandle, ShowWindowCommands.Normal)
ShowWindow(WindowHandle, ShowWindowCommands.Hide)
End If
ShowWindow(WindowHandle, ShowWindowCommands.Normal)
SetForegroundWindow(WindowHandle)