C# 当WinForm打开时,如何关注WebView2?

C# 当WinForm打开时,如何关注WebView2?,c#,winforms,webview,webview2,C#,Winforms,Webview,Webview2,我有一个WinForm应用程序,它只有一个显示本地网站的WebView2 该应用程序是从另一个应用程序启动的,一旦它运行,用户将扫描一些内容,问题是一旦我的应用程序运行,WebView2就没有焦点,因此当用户扫描项目时,我的网页不会处理它们 只有当我点击控件时,我才能完成我的工作 启动应用程序后,如何将焦点设置到我的WebView 我在表单加载中尝试了以下操作: private void Form1_Load(object sender, EventArgs e) { webView.S

我有一个WinForm应用程序,它只有一个显示本地网站的WebView2

该应用程序是从另一个应用程序启动的,一旦它运行,用户将扫描一些内容,问题是一旦我的应用程序运行,WebView2就没有焦点,因此当用户扫描项目时,我的网页不会处理它们

只有当我点击控件时,我才能完成我的工作

启动应用程序后,如何将焦点设置到我的WebView

我在表单加载中尝试了以下操作:

private void Form1_Load(object sender, EventArgs e)
{
    webView.Source = new Uri(System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\XXXX\\index.html");

    TopMost = true;
    Focus();
    BringToFront();
    Activate();
    webView.Focus();
}
这是一个已经在我测试的最新预发布包(1.0.790-prerelease)中修复的问题,但不幸的是,在这之前的最后一个稳定版本中没有。因此,如果您使用的是最新的预发布版本,则足以调用:

webView21.Focus();
旧版本

但作为一种解决方法,您可以订阅
导航已完成
,然后找到浏览器子窗口并设置焦点:

public const uint GW_CHILD = 5;
[DllImport("user32.dll")]
public static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);
[DllImport("user32.dll")]
public static extern IntPtr SetFocus(IntPtr hWnd);

WebView2 webView21 = new Microsoft.Web.WebView2.WinForms.WebView2();
private async void Form1_Load(object sender, EventArgs e)
{
    webView21.Dock = DockStyle.Fill;
    this.Controls.Add(webView21);
    await webView21.EnsureCoreWebView2Async();
    webView21.Source = new Uri("https://bing.com");

    webView21.NavigationCompleted += WebView21_NavigationCompleted;
}

private void WebView21_NavigationCompleted(
    object sender, CoreWebView2NavigationCompletedEventArgs e)
{
    var child = GetWindow(webView21.Handle, GW_CHILD);
    SetFocus(child);
}

这是一个问题,在我测试的最新预发布包(1.0.790-prerelease)中已修复,但不幸的是,在之前的最后一个稳定版本中未修复。我尝试了旧版本的解决方案,但它不适用于我,将WebView2升级到预发布,只需使用.Focus()即可,谢谢。谢谢@IgorMytyuk的反馈。很高兴听到你能够解决这个问题。我也尝试了第二种方法,它在旧版本中运行正常。如果您想再试一次,请确保已附加所有事件处理程序。旧版本的解决方案适用于当前版本1.0.705。50@VeljaRadenkovic我希望旧版本的解决方案可以与所有新版本一起使用。(但由于它依赖于实现细节(子窗口句柄),因此无法保证。)