【问题标题】:C# ChromiumWebBrowser: Prevent control from stealing focusC# ChromiumWebBrowser:防止控件窃取焦点
【发布时间】:2016-09-04 04:02:25
【问题描述】:

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

但是,当新的网络浏览器被创建并添加到表单中时,程序会跳转到任何其他程序的前面,并获得焦点。示例:我启动我的程序,按下按钮开始其任务,打开记事本输入一些文本,当导航到新站点时我的程序跳转到它前面。

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

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

【问题讨论】:

  • 你用的是什么版本?您使用的是WinForms 还是WPF? (当您提出任何问题时,请包括此信息)。问题是否使用MinimalExample 重现? github.com/cefsharp/CefSharp.MinimalExample
  • 我将 ChromiumWebBrowser 用于 winforms。
  • CefSharp.WinForms.47.0.3 和 CefSharp.WinForms.49.0.0
  • @amaitland 你的例子是浏览器模拟器,不适合我的情况。我的程序自动加载一个网站,然后处理它,然后加载另一个网站....
  • 找到bug参考,已经有人开issue了,可以在bitbucket.org/chromiumembedded/cef/issues/1856跟踪进度

标签: c# winforms focus cefsharp chromium-embedded


【解决方案1】:

正如@amaitland 所说,this looks like a bug。

我使用的解决方法是:

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

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

2) 在页面加载时传递一个回调 .net 函数,您只需将焦点放在您选择的标签上即可将焦点放回 winforms。

Label1.Focus()

【讨论】:

    【解决方案2】:
    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();
          }
          // ...
      }
      

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

    【讨论】:

    • 您好,遇到同样的问题,您能解释一下这是什么意思吗?
    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多