Visual Studio 不允许我通过设计器将 CefSharpBrowserControl 添加到表单
Visual Studio is not letting me add CefSharpBrowserControl to a form via the designer
所以我决定试用 CefSharp 扩展,我遇到的第一件事是什么?一个不允许我使用附加组件的错误。
这太令人沮丧了,因为在我去过的任何论坛上,我都做了管理员或创建者让我做的每一件事。我试图只编译 CEFSharp 的 GitHub 上的源代码,但这没有用。
老实说,我认为他们应该只提供一个预编译的 .dll 文件或一组 .dll 文件,您可以将它们添加到引用中,而不是期望您自己做.只是很痛苦,CEFSharp。
我试过将配置设置为 x64 和任何 CPU。我试过引用几个与 CEFSharp 相关的不同 dll。我试图以编程方式添加浏览器元素,这很有效,但我不能用它做任何事情(例如在网页加载完成时执行代码)。到目前为止,这些解决方案中 none 完全有效。
Imports CefSharp
Imports CefSharp.WinForms
Public Class Browser
Dim browser As New _
CefSharp.WinForms.ChromiumWebBrowser("https://google.com/")
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles _
MyBase.Load
Me.Controls.Add(browser)
browser.Parent = Panel1
browser.Dock = DockStyle.Fill
End Sub
End Class
任何时候我想通过设计器工具箱将浏览器控件添加到我的表单中,它都不会让我这样做。它一直显示这个错误框,上面写着 "Failed to load CefSharpBrowser, deleting from the toolbox." 或类似的内容。应该可以直接丢进设计器里,显然不行
在 CefSharp 的 google 组中也有类似的讨论:Adding CefSharp control to the toolbox and The name "WebView" does not exist in the namespace。
他们说 Visual Studio 在使用混合模式 (C++/CLR) 程序集时有一些限制。 CefSharp 中没有开箱即用的 Visual Studio 设计器支持。 some hack 关于如何去做,但我认为不值得花时间在上面。大多数人只是接受事实并继续前进。
我们成功地将 CefSharp 用于我们的一个项目,并且我们以编程方式将 ChromiumWebBrowser 控件添加到表单中,这与您在示例中的做法非常相似。
I've tried to add the browser element programmatically, and that's
worked, but I can't do anything with it (such as execute code when the
webpage is done loading). So far none of these solutions have worked
at all.
有一个 LoadingStateChanged 事件,您可以使用它来监视 Web 浏览器控件的状态。我们用它来显示进度指示,直到我们的网页完全加载。以下是我们的做法:
private System.Windows.Forms.PictureBox picProgress;
bool loaded = false;
ChromiumWebBrowser browse;
public Main()
{
var uiUrl = "some url or local html file";
browse = new ChromiumWebBrowser(uiUrl);
browse.Dock = DockStyle.Fill;
Controls.Add(browse);
browse.LoadingStateChanged += Browse_LoadingStateChanged;
}
private void Browse_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
{
if (!e.IsLoading)
{
picProgress.BeginInvoke((Action)(() => {
loaded = true;
picProgress.Visible = false;
browse.Visible = true;
}));
}
else
{
browse.BeginInvoke((Action)(() => {
loaded = false;
browse.Visible = false;
}));
}
}
抱歉,它是用 C# 编写的,但我认为您可以轻松地将其改编为 VB.net。
所以我决定试用 CefSharp 扩展,我遇到的第一件事是什么?一个不允许我使用附加组件的错误。
这太令人沮丧了,因为在我去过的任何论坛上,我都做了管理员或创建者让我做的每一件事。我试图只编译 CEFSharp 的 GitHub 上的源代码,但这没有用。
老实说,我认为他们应该只提供一个预编译的 .dll 文件或一组 .dll 文件,您可以将它们添加到引用中,而不是期望您自己做.只是很痛苦,CEFSharp。
我试过将配置设置为 x64 和任何 CPU。我试过引用几个与 CEFSharp 相关的不同 dll。我试图以编程方式添加浏览器元素,这很有效,但我不能用它做任何事情(例如在网页加载完成时执行代码)。到目前为止,这些解决方案中 none 完全有效。
Imports CefSharp
Imports CefSharp.WinForms
Public Class Browser
Dim browser As New _
CefSharp.WinForms.ChromiumWebBrowser("https://google.com/")
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles _
MyBase.Load
Me.Controls.Add(browser)
browser.Parent = Panel1
browser.Dock = DockStyle.Fill
End Sub
End Class
任何时候我想通过设计器工具箱将浏览器控件添加到我的表单中,它都不会让我这样做。它一直显示这个错误框,上面写着 "Failed to load CefSharpBrowser, deleting from the toolbox." 或类似的内容。应该可以直接丢进设计器里,显然不行
在 CefSharp 的 google 组中也有类似的讨论:Adding CefSharp control to the toolbox and The name "WebView" does not exist in the namespace。
他们说 Visual Studio 在使用混合模式 (C++/CLR) 程序集时有一些限制。 CefSharp 中没有开箱即用的 Visual Studio 设计器支持。 some hack 关于如何去做,但我认为不值得花时间在上面。大多数人只是接受事实并继续前进。
我们成功地将 CefSharp 用于我们的一个项目,并且我们以编程方式将 ChromiumWebBrowser 控件添加到表单中,这与您在示例中的做法非常相似。
I've tried to add the browser element programmatically, and that's worked, but I can't do anything with it (such as execute code when the webpage is done loading). So far none of these solutions have worked at all.
有一个 LoadingStateChanged 事件,您可以使用它来监视 Web 浏览器控件的状态。我们用它来显示进度指示,直到我们的网页完全加载。以下是我们的做法:
private System.Windows.Forms.PictureBox picProgress;
bool loaded = false;
ChromiumWebBrowser browse;
public Main()
{
var uiUrl = "some url or local html file";
browse = new ChromiumWebBrowser(uiUrl);
browse.Dock = DockStyle.Fill;
Controls.Add(browse);
browse.LoadingStateChanged += Browse_LoadingStateChanged;
}
private void Browse_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
{
if (!e.IsLoading)
{
picProgress.BeginInvoke((Action)(() => {
loaded = true;
picProgress.Visible = false;
browse.Visible = true;
}));
}
else
{
browse.BeginInvoke((Action)(() => {
loaded = false;
browse.Visible = false;
}));
}
}
抱歉,它是用 C# 编写的,但我认为您可以轻松地将其改编为 VB.net。