You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET实现双击DataGridView列在WebView2中打开对应URL

实现双击DataGridView的「Name」列在WebView2中打开对应链接

实现步骤:

  • 给DataGridView1添加CellDoubleClick事件处理,捕获双击操作
  • 在事件中判断双击目标是否为「Name」列,提取对应行的「url」值
  • 调用WebView2的导航方法打开链接
  • 修正原代码中EnsureHttps方法的变量错误

完整代码:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    AddHandler Me.Resize, AddressOf Form_Resize
    AddHandler WebView.NavigationStarting, AddressOf EnsureHttps
    InitializeAsync()
    Dim t As New DataTable()
    t.Columns.Add("id")
    t.Columns.Add("Name")
    t.Columns.Add("url")
    t.Rows.Add(New Object() {"1", "Philips APAC Centre", "https://www.google.com/search?tbs=lf:1,lf_ui:4&tbm=lcl&q=philips+singapore&rflfq=1&num=10&rldimm=6082032048092871869&ved=2ahUKEwjAuLeM2un-AhWAzzgGHe7qDswQu9QIegQIRhAL#rlfi=hd:;si:3450890534334536328,l,ChFwaGlsaXBzIHNpbmdhcG9yZSIDiAEBSN_D87CqroCACFojEAAYABgBIhFwaGlsaXBzIHNpbmdhcG9yZSoECAIQADICZW6SARZjb25zdW1lcl9hZHZpY2VfY2VudGVyqgFVCgwvZy8xeW16enJzbGQQASoLIgdwaGlsaXBzKAAyHxABIhspDALHL2gj5FH_XQXCrrvZukYbjrVUmSjB-CYyFRACIhFwaGlsaXBzIHNpbmdhcG9yZQ;mv:[[1.4505105,103.89954859999999],[1.2679569,103.79753199999999]]"})
    t.Rows.Add(New Object() {"2", "Philips Lighting (Light Lab)", "https://www.google.com/search?tbs=lf:1,lf_ui:4&tbm=lcl&q=philips+singapore&rflfq=1&num=10&rldimm=6082032048092871869&ved=2ahUKEwjAuLeM2un-AhWAzzgGHe7qDswQu9QIegQIRhAL#rlfi=hd:;si:6082032048092871869,l,ChFwaGlsaXBzIHNpbmdhcG9yZSIDiAEBSL-c_5rngICACFojEAAYABgBIhFwaGlsaXBzIHNpbmdhcG9yZSoECAIQADICZW6SARVsaWdodGluZ19tYW51ZmFjdHVyZXKqAVUKDC9nLzF5bXp6cnNsZBABKgsiB3BoaWxpcHMoADIfEAEiGykMAscvaCPkUf9dBcKuu9m6RhuOtVSZKMH4JjIVEAIiEXBoaWxpcHMgc2luZ2Fwb3Jl;mv:[[1.4505105,103.89954859999999],[1.2679569,103.79753199999999]]"})
    DataGridView1.DataSource = t
    DataGridView1.Columns("url").Visible = False
End Sub

Private Sub Form_Resize(ByVal sender As Object, ByVal e As EventArgs)
    WebView.Size = Me.ClientSize - New System.Drawing.Size(WebView.Location)
End Sub

Private Sub EnsureHttps(ByVal sender As Object, ByVal args As CoreWebView2NavigationStartingEventArgs)
    Dim uri As String = args.Uri
    If Not uri.StartsWith("https://") Then
        ' 修正原代码变量错误:将url改为uri
        WebView.CoreWebView2.ExecuteScriptAsync($"alert('{uri} is not safe, try an https link')")
        args.Cancel = True
    End If
End Sub

Private Async Sub InitializeAsync()
    Await WebView.EnsureCoreWebView2Async(Nothing)
    Await WebView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("window.chrome.webview.postMessage(window.document.URL);")
End Sub

' 新增:DataGridView双击事件处理
Private Sub DataGridView1_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick
    ' 过滤表头和无效行点击
    If e.RowIndex >= 0 AndAlso e.ColumnIndex = DataGridView1.Columns("Name").Index Then
        Dim targetUrl As String = DataGridView1.Rows(e.RowIndex).Cells("url").Value.ToString()
        ' 确保WebView2核心已初始化
        If WebView.CoreWebView2 IsNot Nothing Then
            WebView.CoreWebView2.Navigate(targetUrl)
        Else
            ' 未初始化则先完成初始化再导航
            Task.Run(Async Sub()
                Await WebView.EnsureCoreWebView2Async(Nothing)
                WebView.CoreWebView2.Navigate(targetUrl)
            End Sub)
        End If
    End If
End Sub

关键细节:

  • 事件中先校验点击的行和列有效性,避免空行、表头点击引发异常
  • 导航前检查CoreWebView2状态,防止未初始化时调用导航方法报错
  • 修正了原代码中EnsureHttps方法的变量名错误,避免alert弹窗失效

内容的提问来源于stack exchange,提问作者roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:27:01