2013-12-11 34 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 
相關問題