2013-12-11 39 views
1

我想为Chromium嵌入式框架使用CefSharp CLR绑定来创建替代的Web浏览器控件,我们可以将其嵌入到仅支持旧版ActiveX控件的应用程序中(WonderWare InTouch人机界面),试图获得一些旧的机器的HTML5支持。Interop用户控件中的CEFSharp(Chromium嵌入式框架)

到目前为止,我已经创建使用Microsoft InteropForms Toolkit的互操作的用户控制和嵌入在web视图CefSharp.WinForms到在一个漂亮的裸机方式控制,即

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 /代码库Cefsharp.WebControl.dll

这似乎对日工作大部分,但我有一些我不完全理解的问题。我用Excel中的VBA形式的测试它(纯粹是出于方便),当我使用窗体生成器,它实际上初始化控制,当它被添加到用户形式的完全加载的网页:

但是,当我尝试显示UseForm时,它似乎要么销毁句柄或webview的实例(或两者),我不知道如何解决它。一旦我尝试显示表单并尝试类似

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

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

如果有人对此有所了解,我将不胜感激。谢谢!

回答

0

好吧,我想通了!我认为这部分与处理程序有关,部分与我初始化webview的方式/时间有关。我使用的解决方案最终使用了CefSharp.Wpf而不是Windows Form,但它大部分是相同的。主要区别是在WebControl Designer中添加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 
相关问题