如何在CefSharp中实现新选项卡,并更改正确的地址和标题?

问题描述 投票:0回答:1

我正在使用CefSharp创建一个浏览器。它工作正常,我可以使用新标签导航到各种网站。但是当我点击之前的标签时,所有标签在地址栏中显示相同的URL,并且所有标签都具有完全相同的标题。这是我的代码:

    private void FormBrowser_Load(object sender, EventArgs e)
    {
        CefSettings settings = new CefSettings();
        Cef.Initialize(settings);
        ChromiumWebBrowser browser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text);
        browser.Parent = tabControl.SelectedTab;
        browser.Dock = DockStyle.Fill;
        browser.AddressChanged += Browser_AddressChanged;
        browser.TitleChanged += Browser_TitleChanged;
    }

    // new tab function
    public void addNewTab()
    {
        TabPage tpage = new TabPage();
        tpage.Text = "New Tab";
        tabControl.Controls.Add(tpage);
        tabControl.SelectTab(tabControl.TabCount - 1);
        toolStripTextBoxAddress.Text = "";
        ChromiumWebBrowser browser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text);
        browser.Parent = tpage;
        browser.Dock = DockStyle.Fill;
        browser.AddressChanged += Browser_AddressChanged;
        browser.TitleChanged += Browser_TitleChanged;
    }

    private void Browser_TitleChanged(object sender, TitleChangedEventArgs e)
    {
        this.Invoke(new MethodInvoker(() =>
        {
            tabControl.SelectedTab.Text = e.Title;
        }));
    }

    private void Browser_AddressChanged(object sender, AddressChangedEventArgs e)
    {
        this.Invoke(new MethodInvoker(() =>
        {
            toolStripTextBoxAddress.Text = e.Address;
        }));
    }

    // navigate method
    private void toolStripTextBoxAddress_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            if (!string.IsNullOrEmpty(toolStripTextBoxAddress.Text))
            {
                if (!toolStripTextBoxAddress.Text.Contains("."))
                {
                    getCurrentBrowser().Load("http://www.google.com/search?q=" + toolStripTextBoxAddress.Text);
                }
                else
                {
                    getCurrentBrowser().Load(toolStripTextBoxAddress.Text);
                }
            }
        }
    }

   // get current browser
    private ChromiumWebBrowser getCurrentBrowser()
    {
        return (ChromiumWebBrowser)tabControl.SelectedTab.Controls[0];
    }

    // new tab button
    private void toolStripButtonNewTab_Click(object sender, EventArgs e)
    {
        addNewTab();
    }

这是我尝试过的:

    private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
    {
        ChromiumWebBrowser currentBrowser = getCurrentBrowser();
        toolStripTextBoxAddress.Text = currentBrowser.Address;
    }

当我尝试打开一个新标签时,它在这行return (ChromiumWebBrowser)tabControl.SelectedTab.Controls[0];给了我一个错误

我怎么解决这个问题?提前致谢。

c# winforms cefsharp
1个回答
0
投票

我以非常类似的方式编写了我的多标签cefsharp代码,并遇到了同样的错误。

这是由默认的标签页数引起的。 (将tabcontrol拖动到表单时,默认情况下会自带2个标签页)。在属性面板中,我删除了这两个标签页,以便浏览器启动零标签页。只有在您开始浏览时,通过输入网址或点击收藏夹,才会添加任何标签页。

如果未将初始化的tabpages数设置为零,则这两个“空”的tabpages没有附加浏览器。因此,getcurrentbrowser()函数无法在这些空白的tabpages上找到任何浏览器并发生错误。

© www.soinside.com 2019 - 2024. All rights reserved.