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
相关产品推荐
相关产品推荐

