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

C#ChromiumWebBrowser:防止控件窃取焦点,c#,winforms,focus,cefsharp,chromium-embedded,C#,Winforms,Focus,Cefsharp,Chromium Embedded,我正在制作一个带有ChromiumWebBrowser表单的程序。导航是自动完成的。当webbrowser完成它的任务时,我将处理它,创建一个新的webbrowser,将它添加到表单,并加载一个新地址 但是,当新的webbrowser被创建并添加到表单中时,该程序会以焦点领先于顶部的其他程序。示例:我启动我的程序,按下按钮开始它的任务,打开记事本键入一些文本,当导航到新站点时,我的程序跳转到它前面 即使窗口最小化,它仍然会从其他打开的程序中窃取焦点 如何防止它在创建后窃取焦点 您的表单需要设置:

我正在制作一个带有ChromiumWebBrowser表单的程序。导航是自动完成的。当webbrowser完成它的任务时,我将处理它,创建一个新的webbrowser,将它添加到表单,并加载一个新地址

但是,当新的webbrowser被创建并添加到表单中时,该程序会以焦点领先于顶部的其他程序。示例:我启动我的程序,按下按钮开始它的任务,打开记事本键入一些文本,当导航到新站点时,我的程序跳转到它前面

即使窗口最小化,它仍然会从其他打开的程序中窃取焦点

如何防止它在创建后窃取焦点

  • 您的表单需要设置:this.Topmost=false; 设置:this.BringToFront()

  • 将新浏览器添加到表单,就像下面的函数一样:

    private ChromiumWebBrowser AddNewBrowser(FATabStripItem tabStrip, String url)
    {
        if (url == "")
        {
            url = OpenUrl;
            txtUrl.Select();
            txtUrl.Focus();
        }
        else
        {
            tabStrip.Select();
            tabStrip.Focus();
        }
        // ...
    }
    
  • 希望对你有帮助。谢谢

    正如@amaitland所说

    我使用的变通方法有:

    1) 禁用浏览器。这将阻止浏览器接收鼠标/键盘输入,但不会“灰显”控件

    Browser1=New-CefSharp.WinForms.ChromiumWebBrowser(url)
    Browser1.Enabled=False
    
    2) 在页面加载时传递回调.net函数,只需将焦点放回所选标签即可

    Label1.Focus()
    
    您使用的是什么版本?您使用的是
    WinForms
    还是
    WPF
    ?(当您提出任何问题时,请包括此信息)。是否使用
    示例再现问题?我正在使用ChromiumWebBrowser for winforms.CefSharp.winforms.47.0.3和CefSharp.winforms.49.0。0@amaitland您的示例是浏览器模拟器,不适合我的情况。我的程序自动加载一个网站,并对其进行处理,然后加载另一个网站…找到该漏洞的引用,有人已经打开了一个问题,您可以在Hi跟踪进度,遇到相同的问题,您能解释一下这意味着什么吗?