C# ChromiumWebBrowser:防止控件窃取焦点

3
我正在制作一个带有ChromiumWebBrowser的表单程序。导航是自动完成的。当WebBrowser完成任务后,我将处理它,创建一个新的WebBrowser,将其添加到表单中,并加载一个新的地址。
但是,当新的WebBrowser被创建并添加到表单中时,程序会跳到前面,无论其他程序是否在顶部并具有焦点。例如:我启动我的程序,按下按钮开始执行任务,在打开记事本以输入一些文本时,当导航到新网站时,我的程序就会跳到前面。
即使窗口最小化,它仍然会从其他打开的程序中夺取焦点。
如何防止它在创建后夺取焦点?

你使用的是哪个版本?你正在使用WinForms还是WPF?(请在提问时附上这些信息)。问题是否在使用MinimalExample时复现?https://github.com/cefsharp/CefSharp.MinimalExample - amaitland
CefSharp.WinForms.47.0.3 和 CefSharp.WinForms.49.0.0 - Minh Giang
@amaitland,你的例子是浏览器仿真器,不适用于我的情况。我的程序自动加载一个网站,然后处理它,并加载另一个网站... - Minh Giang
一般情况下,我不会从未知来源下载 zip 文件。如果你可以上传到 GitHub 或其他代码共享服务,那我会去看一下。 - amaitland
1
发现了这个 bug 的引用,已经有人开了一个问题,你可以在 https://bitbucket.org/chromiumembedded/cef/issues/1856/ 上跟踪进展。 - amaitland
显示剩余7条评论
2个回答

1

正如@amaitland所说,这看起来像一个bug

我使用的解决方法是:

1)禁用浏览器。这将防止浏览器接收鼠标/键盘输入,但不会使控件变灰。

Browser1 = New CefSharp.WinForms.ChromiumWebBrowser(url)
Browser1.Enabled = False

2) 传递一个回调的 .net 函数,当页面加载完成时,您只需将焦点放回到 WinForms,通过将焦点放在您选择的标签上。

Label1.Focus()

-1
  1. 你的表单需要设置:this.Topmost = false; 并且只需设置:this.BringToFront();

  2. 像下面的函数一样向表单添加新的浏览器:

    private ChromiumWebBrowser AddNewBrowser(FATabStripItem tabStrip, String url)
    {
        if (url == "")
        {
            url = OpenUrl;
            txtUrl.Select();
            txtUrl.Focus();
        }
        else
        {
            tabStrip.Select();
            tabStrip.Focus();
        }
        // ...
    }
    

希望对你有所帮助。谢谢!


你好,我也遇到了同样的问题,请问您能解释一下这意味着什么吗? - timeshift

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接