2013-12-11 2 views
1

Я пытаюсь использовать привязки CLR CefSharp для Chromium Embedded Framework для создания альтернативного элемента управления веб-браузером, который мы можем внедрить в приложение, которое поддерживает только старые элементы управления ActiveX (WonderWare InTouch HMI), пытаясь получить некоторую поддержку HTML5 для некоторых старых машин.CEFSharp (Chromium Embedded Framework) в Interop User Control

До сих пор я создал Interop пользовательский элемент управления с помощью 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/кодовая Cefsharp.WebControl.dll

Это похоже на работу для го Большая часть, но у меня есть некоторые проблемы, которые я не совсем понимаю. Я проверяю его с формами VBA в Excel (чисто из соображений удобства), и когда я использую форму Builder, он фактически инициализирует контроль, когда он добавляется к пользовательской форме и загружает веб-страницу отлично:

Однако, когда я пытаюсь показать UseForm, он либо уничтожает дескриптор, либо экземпляр webview (или обоих), и я не могу понять, как его исправить. Как только я попытаюсь показать форму и попробую что-то вроде

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

Я получаю сообщение об ошибке, что объект не существует. Я немного испортил, и иногда я получаю разные ошибки, например, указатель недействителен, но до сих пор я не понял, как правильно настроить его. Я думаю, что это проблема с обработкой событий User Form, но я не уверен.

Если у кого-то есть понимание, я бы очень признателен. Благодаря!

ответ

0

Хорошо, я понял! Я думаю, что отчасти это связано с обработчиком, а отчасти было связано с тем, как/когда я инициализировал веб-просмотр. Решение, с которым я пошел, закончилось тем, что использовало CefSharp.Wpf вместо Windows Form, но это в основном то же самое. Основное различие заключается в добавлении инициализации элемента управления ElementHost в WebControl Designer и создании нового 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 
Смежные вопросы