本页说明如何在 .NET Framework 窗体项目中使用官方 Microsoft.Web.WebView2.WinForms.WebView2 控件:运行时前置、在 LCode 中引用与放置、常用属性/方法,以及最小导航示例。面向传统 WinForms;凡有代码均同时给出 C# 5.0 与 VB.NET。设计器文案以 LCode 中文界面为准。

前置条件

要求(以 LCode 实况为准)
目标框架 .NET Framework 4.6.2 或更高(建议 4.7.2 / 4.8;LCode 默认窗体模板为 4.8)
本机 Runtime 须安装 WebView2 Runtime(Evergreen)。Windows 7 / 8 / 8.1 请使用该系统支持的最后版本(通常 ≤ 109)
控件类型 Microsoft.Web.WebView2.WinForms.WebView2
程序集 Microsoft.Web.WebView2.WinFormsMicrosoft.Web.WebView2.Core(SDK 包 Microsoft.Web.WebView2,当前随 LCode 分发版本为 1.0.3967.48
原生加载器 输出目录须有对应架构的 WebView2Loader.dll(x86 / x64);工具箱首次拖放会由 LCode 写入工程并配置复制
操作系统 Windows(Win32);过旧系统无法使用 WebView2
提示:SDK 与 Runtime 是两回事:SDK 程序集随工程编译;Runtime 装在用户机器上。缺 Runtime 时设计器仍可放置控件并编译,但运行时无法加载网页。

在 LCode 中添加 WebView2

LCode 已集成官方控件到窗体设计器工具箱,并支持首次拖放时把 SDK 复制进工程(vendoring)。

方式一:工具箱拖放(推荐)

  1. 窗体应用入门 建好「Windows 应用程序」项目,确认目标框架 ≥ 4.6.2。
  2. 双击主窗体,底部切到设计页签。
  3. 打开工具箱,在「Windows 窗体」相关分类中找到 WebView2 浏览器(通常排在「Web 浏览器」上方),拖到设计面。
  4. 首次拖放时,LCode 会:
    • 将 SDK 复制到工程目录 packages\Microsoft.Web.WebView2.1.0.3967.48\(版本号以本机 LCode 自带为准);
    • 添加对 Microsoft.Web.WebView2.CoreMicrosoft.Web.WebView2.WinForms 的相对路径引用;
    • 配置 WebView2Loader.dll 复制到输出目录,并导入 WebView2.LCode.targets
    • 可能弹出「WebView2 环境提示」(Runtime / 目标框架检查)。
  5. 在属性面板将控件 Name 设为便于编码的名字(下文示例用 webView21),按需设置 Dock(如 Fill)。
可移植性:请把工程内 packages\Microsoft.Web.WebView2.* 随项目一并拷贝或纳入版本管理;引用的 HintPath 应指向工程内相对路径,勿指向 LCode 安装目录。

方式二:代码 / 手工引用

若未使用拖放,可按 引用 DLL 手动添加程序集,再在代码中创建控件:

  1. 从 LCode 安装目录的 data\WebView2\lib\net462\ 取得 Microsoft.Web.WebView2.Core.dllMicrosoft.Web.WebView2.WinForms.dll(或从已 vendoring 的工程 packages 复制整包)。
  2. 在项目中添加上述两程序集引用;将对应架构的 WebView2Loader.dll 以 Content(链接)复制到输出目录根(文件名保持 WebView2Loader.dll)。
  3. 在窗体构造函数(或 Load)中 new WebView2()Controls.Add,并调用下文初始化与导航代码。

常用属性

属性 类型 / 说明
Source Uri。设置或读取当前导航地址;赋值会触发导航(控件已初始化后)
CoreWebView2 核心浏览器对象;在 EnsureCoreWebView2Async 完成前可能为 null
ZoomFactor double。缩放比例,默认 1.0
DefaultBackgroundColor 控件背景色(页面未铺满时可见)
AllowExternalDrop 是否允许向控件拖入外部文件
CreationProperties 创建环境时的附加选项(用户数据目录、浏览器可执行文件路径等)
Dock / Anchor 标准 WinForms 布局属性;嵌入浏览器常用 Dock = Fill

常用方法与事件

成员 说明
EnsureCoreWebView2Async 异步初始化核心运行时;之后才可安全使用 CoreWebView2
CoreWebView2.Navigate(string) 导航到指定 URL 或本地路径 URI
CoreWebView2.NavigateToString(string) 用 HTML 字符串作为页面内容加载
Reload / GoBack / GoForward 刷新、后退、前进(亦可经 CoreWebView2
Stop 停止当前导航
ExecuteScriptAsync 在页面中执行 JavaScript,并异步返回结果字符串
CoreWebView2InitializationCompleted 核心初始化完成事件;可在此设置额外选项后再导航
NavigationStarting / NavigationCompleted 导航开始 / 完成;可用于拦截地址或更新状态栏
Dispose 释放本机资源;关闭窗体前应确保控件随窗体正确释放

最小实例:初始化并 Navigate

假设设计器已放置 webView21。在窗体 Load(或构造函数末尾)中初始化核心,再导航。C# 使用 async void 仅作窗体事件入口;业务逻辑中请优先 async Task

C#
using System;
using System.Windows.Forms;
using Microsoft.Web.WebView2.WinForms;

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    private async void MainForm_Load(object sender, EventArgs e)
    {
        // 初始化核心;参数 null 表示使用默认环境
        await webView21.EnsureCoreWebView2Async(null);

        // 方式 A:CoreWebView2.Navigate
        webView21.CoreWebView2.Navigate("https://www.example.com/");

        // 方式 B(二选一):直接设 Source
        // webView21.Source = new Uri("https://www.example.com/");
    }
}
VB.NET
Imports System
Imports System.Windows.Forms
Imports Microsoft.Web.WebView2.WinForms

Public Class MainForm
    Inherits Form

    Public Sub New()
        InitializeComponent()
    End Sub

    Private Async Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' 初始化核心;参数 Nothing 表示使用默认环境
        Await webView21.EnsureCoreWebView2Async(Nothing)

        ' 方式 A:CoreWebView2.Navigate
        webView21.CoreWebView2.Navigate("https://www.example.com/")

        ' 方式 B(二选一):直接设 Source
        ' webView21.Source = New Uri("https://www.example.com/")
    End Sub
End Class
提示:若在设计器中已把 Source 设为有效 URI,首次显示时也可能自动导航;代码中仍建议先 EnsureCoreWebView2Async,再访问 CoreWebView2 的其它 API。

注意事项

主题 说明
UI 线程 创建、操作 WebView2 与订阅其事件应在 UI 线程进行。后台线程更新控件请用 Control.Invoke / BeginInvoke 切回 UI
异步与分发 EnsureCoreWebView2AsyncExecuteScriptAsync 等为异步;窗体关闭过程中勿再 await 未取消的导航/脚本,以免回调落到已释放控件
卸载与生命周期 关闭窗体时让控件随窗体 Dispose。若在代码中动态创建,关闭前从 Controls 移除并调用 Dispose,避免残留浏览器进程/用户数据目录占用
与 WinForms 关系 WebView2 是 HWND 承载的原生控件,与普通 WinForms 子控件同样遵循父窗体句柄创建/销毁顺序;MDI 子窗体关闭时注意子窗体内的 WebView2 一并释放
架构匹配 工程平台目标(x86 / x64 / AnyCPU)须与复制的 WebView2Loader.dll 架构一致;AnyCPU 优先按进程实际位数部署对应 Loader
用户数据目录 默认环境会写入用户数据目录;多实例同目录可能冲突。需要隔离时通过 CreationProperties 或自定义 CoreWebView2Environment 指定目录
与 IE WebBrowser 工具箱中的「Web 浏览器」是旧 IE 内核控件;新项目请优先用「WebView2 浏览器」

相关阅读