【问题标题】:CEFSharp (Chromium Embedded Framework) in Interop User Control互操作用户控制中的 CEFSharp(Chromium 嵌入式框架)
【发布时间】:2013-12-11 15:12:32
【问题描述】:

我正在尝试使用 Chromium Embedded Framework 的 CefSharp CLR 绑定来创建一个替代的 Web 浏览器控件,我们可以将其嵌入到仅支持旧版 ActiveX 控件 (WonderWare InTouch HMI) 的应用程序中,以尝试获得一些 HTML5 支持对于一些非常旧的机器。

到目前为止,我已经使用 Microsoft InteropForms Toolkit 创建了一个互操作用户控件,并以非常简单的方式将 CefSharp.WinForms WebView 嵌入到控件中,即

Private Sub WebControl_Load(sender As Object, e As EventArgs) Handles Me.Load

    Dim Settings = New CefSharp.Settings
    If (CEF.Initialize(Settings)) Then
        WebView = New WebView(homepage, New BrowserSettings())
        WebView.Dock = DockStyle.Fill
    End If

    Me.Controls.Add(WebView)

End Sub

当我构建 DLL 时,我通过命令注册它

regasm /tlb /codebase Cefsharp.WebControl.dll

这似乎在大多数情况下都有效,但我遇到了一些我不完全理解的问题。我正在使用 Excel 中的 VBA 表单对其进行测试(纯粹是为了方便),当我使用表单生成器时,它实际上会在将控件添加到用户表单并完美加载网页时对其进行初始化:

但是,当我尝试显示 UseForm 时,它似乎破坏了 webview 的句柄或实例(或两者),我不知道如何修复它。一旦我尝试显示表单并尝试类似

Sub Test()
    WebForm.Show
    WebForm.WebControl.Navigate "www.google.com"
End Sub

我得到一个对象不存在的错误。我有点搞砸了,有时我会遇到不同的错误,比如指针无效,但到目前为止我还没有弄清楚如何正确设置它。我认为这是处理用户表单事件的问题,但我不确定。

如果有人对此有任何见解,我将不胜感激。谢谢!

【问题讨论】:

    标签: .net vb.net interop chromium-embedded cefsharp


    【解决方案1】:

    好的,我想通了!我认为这部分与处理程序有关,部分与我初始化 webview 的方式/时间有关。我使用的解决方案最终使用 CefSharp.Wpf 而不是 Windows 窗体,但它几乎是相同的。主要区别在于在 WebControl 设计器上添加 ElementHost 控件的初始化,并在组件初始化过程中创建新的 WebView:

    'Do not change this subroutine in the code editor. Use the designer.
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.WebHost = New System.Windows.Forms.Integration.ElementHost()
        Me.SuspendLayout
        '
        'WebHost
        '
        Me.WebHost.Dock = System.Windows.Forms.DockStyle.Fill
        Me.WebHost.Location = New System.Drawing.Point(0, 0)
        Me.WebHost.Name = "WebHost"
        Me.WebHost.Size = New System.Drawing.Size(404, 244)
        Me.WebHost.TabIndex = 0
        Me.WebHost.Text = "WebHost"
        Me.WebHost.Child = New WebView(homepage, New CefSharp.BrowserSettings)
        '
        'WebControl
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.Controls.Add(Me.WebHost)
        Me.Name = "WebControl"
        Me.Size = New System.Drawing.Size(404, 244)
        Me.ResumeLayout(false)
    
    End Sub
    
    Friend WithEvents WebHost As System.Windows.Forms.Integration.ElementHost
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-23
      • 2023-03-04
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多