【问题标题】:CefSharp Set Object reference for buttons C#?按钮 C# 的 CefSharp 设置对象参考?
【发布时间】:2021-01-14 05:16:06
【问题描述】:

WinForms:

我是 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);
        }
    }
}

感谢您的帮助...

【问题讨论】:

标签: c# visual-studio cefsharp winforms-to-web


【解决方案1】:

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

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);
        }    
    }
}

【讨论】:

  • 非常感谢!我发现我的编辑尝试做错了什么。我不知道 Stack-Listing 被认为是 code 。所以编辑一直拒绝我的编辑。再次感谢 amaitland!
  • 拜托,为什么我被禁止提问?
  • 你必须询问禁止你的人。
  • 谁禁止了我?
猜你喜欢
  • 2013-10-22
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2020-06-23
  • 2013-02-24
  • 1970-01-01
相关资源
最近更新 更多