为什么不能从其他表单创建新的标签?

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

我想从另一种形式调用NewTab()函数。但这是行不通的。我是C#和编程的新手,需要帮助。

Form1:

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 CefSharp.WinForms;

namespace Browser
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    ChromiumWebBrowser chrome;

    private void Window_Load(object sender, EventArgs e)
    {
        CefSettings settings = new CefSettings();
        Cef.Initialize(settings);
        txtUrl.Text = "https://google.com";
        chrome = new ChromiumWebBrowser(txtUrl.Text);
        chrome.Parent = tabControl.SelectedTab;
        chrome.Dock = DockStyle.Fill;
        chrome.AddressChanged += Chrome_AddressChanged;
        chrome.TitleChanged += Chrome_TitleChanged;
    }

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

    private void buttonRefresh_Click(object sender, EventArgs e)
    {
        ChromiumWebBrowser chrome = tabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        if (chrome != null)
        {
            chrome.Refresh();
        }
    }

    private void buttonNavigate_Click(object sender, EventArgs e)
    {
        ChromiumWebBrowser chrome = tabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        if(chrome != null)
        {
            chrome.Load(txtUrl.Text);
        }
    }

    private void buttonForward_Click(object sender, EventArgs e)
    {
        ChromiumWebBrowser chrome = tabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        if (chrome != null)
        {
            if (chrome.CanGoForward)
            {
                chrome.Forward();
            }
        }
    }

    private void buttonBack_Click(object sender, EventArgs e)
    {
        ChromiumWebBrowser chrome = tabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        if (chrome != null)
        {
            if(chrome.CanGoBack)
            {
                chrome.Back();
            }
        }
    }

    private void Window_FormClosing(object sender, FormClosingEventArgs e)
    {
        Cef.Shutdown();
    }

    public void btnNewTab_Click(object sender, EventArgs e)
    {
        NewTab("https://google.com");
    }

    public void NewTab(string url)
    {
        TabPage tab = new TabPage();
        tab.Text = "New Tab";
        tabControl.Controls.Add(tab);
        tabControl.SelectTab(tabControl.TabCount - 1);
        ChromiumWebBrowser chrome = new ChromiumWebBrowser(url);
        chrome.Parent = tab;
        chrome.Dock = DockStyle.Fill;
        txtUrl.Text = url;
        chrome.AddressChanged += Chrome_AddressChanged;
        chrome.TitleChanged += Chrome_TitleChanged;
    }

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

    private void closeTabToolStripMenuItem_Click(object sender, EventArgs e)
    {
        tabControl.Controls.Remove(tabControl.SelectedTab);
    }

    private void openMultipleTabsToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.Show();
    }
}
}

Form2:

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;

namespace Browser
{
public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 form1 = new Form1();
        form1.NewTab("https://google.com");
    }
}
}

我尝试制作具有特殊功能的Webbrowser。我为此使用CefSharp。对不起难看的代码,我是C#和编程的新手。大部分内容都来自YouTube教程。我正在尝试制作另一个可以通过菜单条打开的窗口,该菜单条可让您一次打开多个选项卡。但是现在,我什至没有打开一个新的选项卡。如果您能帮助我,这可能很好。

c#
1个回答
2
投票

您创建了一个新的Form1实例,但没有显示。试试这个:

private void button1_Click(object sender, EventArgs e)
{
    Form1 form = new Form1();
    form.NewTab("https://google.com");
    form.Show();
}
© www.soinside.com 2019 - 2024. All rights reserved.