形成焦点问题

时间:2011-01-28 13:21:30

标签: c# winforms focus

我正在处理一个需要在接收一些外部事件时激活表单的应用程序。为此我作为POC创建了以下示例代码。

FormRecvr:

1)创建一个带文本框控件的简单表单

2)在某个端口上有一个TCP列表器列表来接收事件

3)在接收事件时,激活表格,即将其带到前面,使其具有焦点,用户可以输入一些文字。

FormSender:

1)创建一个带有两个按钮控件的简单表单,一个用于通过套接字发送事件来激活rcvr表单,另一个用于退出应用程序。

2)使用列表器创建TCP套接字并发送事件。

执行这个简单的程序后,我注意到接收器形式没有得到关注。该应用的任务栏菜单一直闪烁。窗口不是前景。

我已尝试以下方法使其成为焦点。

this.TopMost = true;

this.Activate();

this.TopMost = false;

我甚至尝试过SetForegroundWindow Win32 API。即便如此,它也无效。它经常工作。 10次​​中的8次,它给出了上述问题。表单将可见但焦点不会出现,任务栏菜单将被伪造。我们必须单击表单或闪烁的任务菜单栏才能获得焦点。

请告诉我如何解决此问题。

3 个答案:

答案 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窃取焦点。