Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在什么情况下焦点位置可以不同于插入符号位置?_C# - Fatal编程技术网

C# 在什么情况下焦点位置可以不同于插入符号位置?

C# 在什么情况下焦点位置可以不同于插入符号位置?,c#,C#,我正在制作一个带有文本框的C#windows窗体应用程序。程序需要非常精确的信息,知道它的窗体何时被激活,以及哪个文本框具有输入焦点。然而,我发现在我的表单中,插入符号在文本框中闪烁,但同时选择了窗口后面桌面上的图标。因此,如果我按enter键,桌面上选定的图标将被打开,而不是在文本框中给我一个新行。在文本框上单击鼠标将解决问题,并将真正的焦点放在文本框上,以便我可以与它交互 当我打开一个internet浏览器窗口,我的应用程序在internet浏览器窗口上打开一个表单时,这种情况似乎最常见 我

我正在制作一个带有文本框的C#windows窗体应用程序。程序需要非常精确的信息,知道它的窗体何时被激活,以及哪个文本框具有输入焦点。然而,我发现在我的表单中,插入符号在文本框中闪烁,但同时选择了窗口后面桌面上的图标。因此,如果我按enter键,桌面上选定的图标将被打开,而不是在文本框中给我一个新行。在文本框上单击鼠标将解决问题,并将真正的焦点放在文本框上,以便我可以与它交互

当我打开一个internet浏览器窗口,我的应用程序在internet浏览器窗口上打开一个表单时,这种情况似乎最常见

我需要知道是什么情况造成的。这可能是由于窗体的最顶端属性是某个设置引起的吗?还是WindowsState?这是很难复制,所以我一直无法通过改变设置的过程找出答案。有人有什么想法吗


谢谢

即使某个特定的文本框(在您的窗口的上下文中)可能被聚焦,也不能保证您的窗口在打开后会成为聚焦窗口和前景窗口

为了检测您的窗口是否集中在操作系统的上下文中,您必须使用旧的win32 API调用
Form.ActiveForm
或任何其他属性都是特定于应用程序的(并且不会告诉您的程序是否在操作系统上处于前台)

关于如何使用这些工具强制聚焦的示例:

if(GetForegroundWindow() != yourForm.Handle)
{
    SetForegroundWindow(yourForm.Handle);
}
当您知道应用程序是操作系统的前台窗口后,
control.Focused
应该可以确定窗口中哪个控件具有焦点

编辑:我只想补充一点,即使您的窗口是最顶层的,也不意味着它将保留操作系统焦点。这只意味着它将在未设置此属性的其他窗口的顶部渲染

if(GetForegroundWindow() != yourForm.Handle)
{
    SetForegroundWindow(yourForm.Handle);
}