1

Chromium Embedded Framework の CefSharp CLR バインディングを使用して、従来の ActiveX コントロール (WonderWare InTouch HMI) のみをサポートするアプリケーションに埋め込むことができる代替 Web ブラウザー コントロールを作成して、いくつかの HTML5 サポートを取得しようとしています。古い機械。

これまでのところ、Microsoft InteropForms Toolkitを使用して Interop User Control を作成し、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

これはほとんどの場合うまくいくようですが、完全には理解できない問題がいくつかあります。Excel で VBA フォームを使用してテストしています (純粋に利便性のため)。Form Builder を使用している場合、ユーザー フォームに追加されたときにコントロールが実際に初期化され、Web ページが完全に読み込まれます。

IDE の例

ただし、UseForm を表示しようとすると、webview のハンドルまたはインスタンス (またはその両方) が破壊されているように見え、修正方法がわかりません。フォームを表示して、次のようなことを試してみると

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

オブジェクトが存在しないというエラーが表示されます。少しいじりましたが、ポインターが無効であるなどの別のエラーが発生することもありますが、これまでのところ、適切に設定する方法がわかりません。ユーザー フォーム イベントの処理に問題があると思いますが、よくわかりません。

誰かがこれについて何か洞察を持っているなら、私はそれを大いに感謝します. ありがとう!

4

1 に答える 1

1

わかりました、私はそれを理解しました!部分的にはハンドラーに関係があり、部分的にはWebビューを初期化する方法/時期に関係していたと思います。私が行ったソリューションは、Windows フォームの代わりに CefSharp.Wpf を使用することになりましたが、ほとんど同じです。主な違いは、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
于 2013-12-12T13:28:39.123 に答える