C# 从另一个 class 使用 WebBrowser

C# Working on WebBrowser from another class

如何从另一个 class 文件导航 WebBrowser1 到一个网站?

基本上我有 2 个 classes,默认一个 (Form1) 和第二个 (MyClass),在 MyClass 我有一个方法是导航 WebBrowser1(来自 Form1)到某个随机站点:

class MyClass : Form1
{
    public void navigate()
    {
        webBrowser1.Navigate("https://www.google.pl/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8");
    }
}

按钮

    public partial class Form1 : Form
    {

    public Form1()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)        
    {
        MyClass mc = new MyClass();
        mc.navigate();
    }
    }

Visual Studio 没有显示任何错误,在我调用此方法(通过按钮)后应用程序没有崩溃,但它仍然无法正常工作。

我是新手,所以请以最简单的方式帮助我。

我的班级:

public class MyClass
{
  public void Navigate(WebBrowser webBrowser)
  {
    webBrowser.Navigate(.....);  //you can navigate webBrowser in Form1 from here
  }
}

在表格 1 中:

private void button2_Click(object sender, EventArgs e)
{
    MyClass mc = new MyClass();
    mc.Navigate(webBrowser1);   // send the reference of webBrowser1 to MyClass
}

因为您是从 Form1 继承 MyClass,所以在按钮单击处理程序中新建 MyClass 的实例将创建一个新的表单实例,我假设, 不是你想要的。

你有两个选择:

第一个选项

完全删除 MyClass 并让 Form1 class 具有此代码:

public partial class Form1 : Form
{
  public void Navigate(string url)
  {
    webBrowser1.Navigate(url);
  }

  private void button2_Click(object sender, EventArgs e)
  {
    this.Navigate("https://www.google.com");
  }
}

第二个选项

或者,如果你真的确定要subclass Form1,那么保留MyClass但做两处改变。不要在按钮单击处理程序中新建 MyClass 的实例。相反,只需写:

public class MyClass : Form1
{
  public void Navigate(string url)
  {
    webBrowser1.Navigate(url);
  }

  private void button2_Click(object sender, EventArgs e)
  {
    this.Navigate("https://www.google.com");
  }
}

然后,在 Program.cs 文件中,更改行:

Application.Run(new Form1());

至:

Application.Run(new MyClass());

无论如何,即使这两个选项中的任何一个都可以正常工作,您需要问问自己为什么要创建 MyClass

我不明白你的代码结构,但我看到你想从另一个 class 控制 WebBrowser 控件的导航,对吗?

在你的 MyClass 中:

public class MyClass
{
    // Holds the instance of web browser control
    public WebBrowser webBrowser;

    //Inject the WebBrowser control
    public MyClass(WebBrowser webBrowser)
    {
        this.webBrowser = webBrowser;
    }

    public void navigate(string url)
    {
        this.webBrowser.Navigate(url);
    } 
} 

在你的表单中 class:

private void button2_Click(object sender, EventArgs e)
{
    MyClass mc = new MyClass(webBrowser1);
    mc.navigate("http://google.com/");
}

您还可以在表单中存储 MyClass 的单个引用 class