0

我有两种形式。我的第一个表格是我的网络浏览器,第二个表格是我的历史记录表格。我希望用户能够从我的历史记录表单中打开网络浏览器中的历史记录链接。我的网络浏览器表单有一个导航方法,我用它来打开页面。我想在我的历史表单中使用这种方法。

这是我的代码。

Web 浏览器表单导航方法

 private void navigateURL(string curURL )
    {

        curURL = "http://" + curURL;
       // urlList.Add(curURL);
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(curURL);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream pageStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(pageStream, Encoding.Default);
        string s = reader.ReadToEnd();
        webDisplay.Text = s;
        reader.Dispose();
        pageStream.Dispose();
        response.Close();

    }

我如何在我的网络浏览器类中调用我的导航方法

  private void homeButton_Click(object sender, EventArgs e)
    {
        GetHomePageURL();
        navigateURL(addressText);
    }

那么我如何在我的第二种形式(历史)中调用这个方法?

4

1 回答 1

1

我马上想到的两种方法......

  1. 引发 Web 浏览器表单侦听的方法。每当用户选择他们想要导航到的历史条目时,您都需要声明该事件并在历史表单中引发它:

    // In the history form, declare event + event-handler delegate
    // Kind of abusing events here, you'd typically have the sender
    // and some sort of eventargs class you'd make...
    public delegate void NavigationRequestedEventHandler(string address);
    public event NavigationRequestedEventHandler NavigationRequested;
    
    // And where you handle the user selecting an history item to navigate to
    // you'd raise the event with the address they want to navigate to
    if (NavigationRequested != null)
        NavigationRequested(address);
    

    然后在 Web 浏览器表单中,您需要在创建历史表单时为该事件添加一个处理程序:

     // Subscribe to event
     this._historyForm = new HistoryForm()
     this._historyForm.NavigationRequested += HistoryForm_NavigationRequested;
    
    // And in the event handler you'd call your navigate method
    private void HistoryForm_NavigationRequested(string address)
    {
      navigateURL(address);
    }
    

    如果您要创建并丢弃多个历史表单,请确保删除您的处理程序 ( _historyForm.NavigationRequested -= HistoryForm_NavigationRequested)。这是一个很好的做法。

  2. 为历史表单提供对 Web 浏览器表单的引用。当您创建历史表单时,Web 浏览器表单将向其传递对自身的引用:new HistoryForm(Me)...理想情况下,它会采用一个接口,其中Navigate定义了方法。它会保存该引用并使用它来调用导航。

    IWebBrowser WebBrowserForm; // Has the method Navigate(string address)
    
    public HistoryForm(IWebBrowser webBrowser)
    {
        this.WebBrowserForm = webBrowser;
    }
    
    private void homeButton_Click(object sender, EventArgs e)
    {
        GetHomePageURL();
        WebBrowserForm.Navigate(address);
    }
    
于 2013-10-25T23:11:16.200 回答