我正在处理一个需要在接收一些外部事件时激活表单的应用程序。为此我作为POC创建了以下示例代码。
FormRecvr:
1)创建一个带文本框控件的简单表单
2)在某个端口上有一个TCP列表器列表来接收事件
3)在接收事件时,激活表格,即将其带到前面,使其具有焦点,用户可以输入一些文字。
FormSender:
1)创建一个带有两个按钮控件的简单表单,一个用于通过套接字发送事件来激活rcvr表单,另一个用于退出应用程序。
2)使用列表器创建TCP套接字并发送事件。
执行这个简单的程序后,我注意到接收器形式没有得到关注。该应用的任务栏菜单一直闪烁。窗口不是前景。
我已尝试以下方法使其成为焦点。
this.TopMost = true;
this.Activate();
this.TopMost = false;
我甚至尝试过SetForegroundWindow Win32 API。即便如此,它也无效。它经常工作。 10次中的8次,它给出了上述问题。表单将可见但焦点不会出现,任务栏菜单将被伪造。我们必须单击表单或闪烁的任务菜单栏才能获得焦点。
请告诉我如何解决此问题。
答案 0 :(得分:0)
设置TopMost
是不必要的;你试过在表格上调用Focus()
吗?
答案 1 :(得分:0)
你试过了吗?
Form.BringToFront();
如果失败则可能
Form.Visible = false;
Minimize window
Form.Visible=true;
Restore window
值得一试
答案 2 :(得分:0)
我并不完全确定您的目标是什么,但是从另一个应用程序 is bad and should not be done/possible窃取焦点。