CefSharp Set Object reference for buttons C#?

-1

WinForms:

I am new to Cefsharp and C# , just wrote a freeware 'Kid Safe Browser' in VS vb.net in visual basic , but IE11 is too limited . I am getting "Object reference not set" for all Buttons . How to fix this ? For example: How do I set an Object Reference for Chrome Load and Navigate Back Forward Refresh etc. ?

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

Thanks for your Help...

c#
visual-studio
cefsharp
winforms-to-web
asked on Stack Overflow Sep 28, 2020 by vmars316 • edited Oct 3, 2020 by vmars316

1 Answer

1

Your problem really isn't anything to do with CefSharp, it's that you haven't created an instance of a class that you are trying to reference. Refactoring your code like I've suggested in the comments so the class is actually instantiated.

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);
        }    
    }
}
answered on Stack Overflow Sep 30, 2020 by amaitland

User contributions licensed under CC BY-SA 3.0