【问题标题】:How to get CefSharp to work in VB.Net WinForms如何让 CefSharp 在 VB.Net WinForms 中工作
【发布时间】:2014-12-13 01:07:36
【问题描述】:

我正在尝试使用 WinForms 在 VB.Net 中创建一个浏览器,但我无法让 CefSharp 工作。我正在使用预发布的 NuGet 包。我正在使用这段代码来构建浏览器:

    Private m_IsInDesignMode As Boolean = True
Public ReadOnly Property IsInDesignMode() As Boolean
    Get
        Return m_IsInDesignMode
    End Get
End Property
Public Sub New()
    InitializeComponent()
    m_IsInDesignMode = (LicenseManager.UsageMode = LicenseUsageMode.Designtime)
    Me.browser = New ChromiumWebBrowser("http://emposoft.tk")
    Me.browser.Dock = DockStyle.Fill

End Sub

我在调试文件夹中有以下文件:

我在 locales 文件夹中有 en_US 文件。 当我运行应用程序时,没有出现错误或警告,它只是一个空白表单。谁能告诉我我做错了什么?我是 CefSharp 的新手,但我是一位经验丰富的 VB.Net 程序员。

【问题讨论】:

  • Me.Controls.Add(Me.browser)

标签: .net vb.net winforms cefsharp


【解决方案1】:

您似乎在 bin 目录中缺少 CefSharp.WinForms.dllicudtl.dat

这里有一些很好的设置技巧:https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#CefSharp_binaries

特别是:


答案最终是在 CefSharp 37 版(当前稳定版)中,您需要在创建浏览器之前显式调用Cef.Initialize(),否则它不会加载。这已在v39.0.0-pre03 NuGet 中修复。

解决办法是:

Public Sub New() InitializeComponent() m_IsInDesignMode = (LicenseManager.UsageMode = LicenseUsageMode.Designtime) CefSharp.Cef.Initialize() Me.browser = New CefSharp.WinForms.ChromiumWebBrowser("http://emposoft.com") Me.Controls.Add(Me.browser) End Sub

【讨论】:

  • 嗨@yoshi,我现在添加了这两个文件。我确实选择了 x86,packages.config 中唯一不同的是targetFramework="net40",而不是targetFramework="net45"。我已将以下代码添加到 form1_loadDim brsettings As New CefSharp.CefSettings brsettings.UserAgent = ("MySurf Labs v3.1") CefSharp.Cef.Initialize(brsettings) 并将其添加到顶部:Private Property browser As ChromiumWebBrowser 并且什么都没有出现。我已经在设计文件中添加了Me.Controls.Add(Me.browser)
  • 1) Initialize() 应该在构造表单之前调用(例如github.com/cefsharp/CefSharp.MinimalExample/blob/master/…)。 2) 构造 ChromiumWebBrowser 后应立即调用 Controls.Add。
  • 如果这仍然不起作用,我鼓励您从项目中删除专有代码并暂时将其发布在 GitHub 上。这将允许其他人尝试加载它并发现问题。
  • 嗨@yoshi,我确实找到了另一个以更简单的方式实现Chromium的项目,但它已经过时了。我想重新在我的项目中实现这一点。如果您仍然可以让我上传到 GitHub,请告诉我。
  • @AJDev 不用担心。感谢您的源代码,我能够找到问题并更新了我的答案。
【解决方案2】:

有趣。作为一个仅供参考,如果您添加一个面板然后将 me.browser.parent 设置为该面板而不是那样做,那么通过代码向您的表单添加控件要容易得多。然后,您可以通过 IDE 控制它的去向以查看它,然后通过将 Dock 设置为填充来对其进行编码。我看到他们使用 me.controls.add 的许多代码段,但只是将父级设置为面板更直接,因此不需要 controls.add。

【讨论】:

    猜你喜欢
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多