-1

赢表格:

我是 Cefsharp 和 C# 的新手,刚刚在 Visual Basic 的 VS vb.net 中编写了一个免费软件“儿童安全浏览器”,但 IE11 太有限了。我收到所有 Buttons 的“未设置对象引用”。如何解决这个问题?例如:如何为 Chrome 加载和导航向后向前刷新等设置对象引用?

System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=CefSharpBrowser01
  StackTrace:
   at CefSharpBrowser01.SafeBrowser.GotoBtn_Click(Object sender, EventArgs e) in 

C:\Users\vmars\source\repos\CefSharpBrowser01\Form1.cs:第 64 行

using CefSharp.WinForms;
using CefSharp.WinForms.Internals;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using cef;
namespace CefSharpBrowser01
{
    public partial class SafeBrowser : Form
    {
        public SafeBrowser()
        {
            InitializeComponent();
        }

        ChromiumWebBrowser chrome;

        private void SafeBrowser_Load(object sender, EventArgs e)
        {
            CefSettings settings = new CefSettings();
            //Initialize;
            Cef.Initialize(settings);
            AddressTxt.Text = "https://www.google.com";
            chrome = new ChromiumWebBrowser(AddressTxt.Text);
            this.Controls.Add(chrome);
            chrome.Dock = DockStyle.Fill;
            chrome.AddressChanged += Chrome_AddressChanged;
        }
        private void Chrome_AddressChanged(object sender, AddressChangedEventArgs e)
        {
            this.Invoke(new MethodInvoker(() =>
            {
                AddressTxt.Text = e.Address;
            }));
        }
        private void BackBtn_Click(object sender, EventArgs e)
        {
    if (chrome.CanGoBack)
        chrome.Back();
        }

        private void ForwardBtn_Click(object sender, EventArgs e)
        {
    if (chrome.CanGoForward)
    chrome.Forward();
        }

        private void RefreshBtn_Click(object sender, EventArgs e)
        {
    chrome.Refresh();
        }

        private void GotoBtn_Click(object sender, EventArgs e)
        {
            chrome.Load(AddressTxt.Text);
        }
    }
}

感谢您的帮助...

4

1 回答 1

1

您的问题实际上与 CefSharp 无关,而是您尚未创建要引用的类的实例。像我在评论中建议的那样重构您的代码,以便实际实例化该类。

namespace CefSharpBrowser01
{
    public partial class SafeBrowser : Form
    {
        public SafeBrowser()
        {
            InitializeComponent();

            CefSettings settings = new CefSettings();
            //Initialize;
            Cef.Initialize(settings);
            AddressTxt.Text = "https://www.google.com";
            chrome = new ChromiumWebBrowser(AddressTxt.Text);
            this.Controls.Add(chrome);
            chrome.Dock = DockStyle.Fill;
            chrome.AddressChanged += Chrome_AddressChanged;
        }

        ChromiumWebBrowser chrome;

        private void Chrome_AddressChanged(object sender, AddressChangedEventArgs e)
        {
            this.Invoke(new MethodInvoker(() =>
            {
                AddressTxt.Text = e.Address;
            }));
        }
        private void BackBtn_Click(object sender, EventArgs e)
        {
    if (chrome.CanGoBack)
        chrome.Back();
        }

        private void ForwardBtn_Click(object sender, EventArgs e)
        {
    if (chrome.CanGoForward)
    chrome.Forward();
        }

        private void RefreshBtn_Click(object sender, EventArgs e)
        {
    chrome.Refresh();
        }

        private void GotoBtn_Click(object sender, EventArgs e)
        {
            chrome.Load(AddressTxt.Text);
        }    
    }
}
于 2020-09-30T23:57:38.753 回答