0

私には2つのフォームがあります。最初のフォームは Web ブラウザーで、2 番目のフォームは履歴フォームです。ユーザーが履歴フォームから Web ブラウザーで履歴リンクを開くことができるようにしたいと考えています。私の Web ブラウザ フォームには、ページを開くために使用する Navigate メソッドがあります。このメソッドを履歴フォームで使用したいと考えています。

これが私のコードです。

Web Browser Form Navigate メソッド

 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();

    }

Web ブラウザー クラス内でナビゲート メソッドを呼び出す方法

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

では、このメソッドを 2 番目のフォーム (History) で呼び出すにはどうすればよいでしょうか??

4

1 に答える 1

1

すぐに思いつく2つの方法...

  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 に答える