在C#Winforms中的同一表单上从一个WebBrowser导航到另一个WebBrowser



我有一个名为webbrowser3的webbrowser,它正在显示其html文件内容的链接。示例: - 一个WebBrowser(WebBrowser3)显示目录(TOC),我希望在哪个章节或它的一部分上单击,它在另一个WebBrowser(WebBrowser2)上显示其内容,该内容以相同的WebBrowser3形式放置。我制作了目录(TOC),但是当单击任何章节时,它在放置TOC的同一WebBrowser(WebBrowser3)上显示其内容。我已经通过以下方式尝试了它,但没有显示所需的结果。

  string toc = File.ReadAllText(StaticClass.ZipFilePath + "\OEBPS\IDSBooktoc.html");
         webBrowser3.DocumentText =toc;

我没有得到完全应该做的事情...这是我的html

    <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Table of Contents</title>
    <!--Styles for the Table of Contents-->
    <style>h1 {text-align: center}
    p {text-align: left}
    p.level_0 {text-indent: 0em }
    p.level_1 {text-indent: 1em }
</style>
  </head>
  <body>
    <h1 class="tocHead">Table of Contents</h1>
    <p class="level_0" height="2em">
      <a href="IDSBookout.html#NCXGen0">2008-21-0043 Chapter 1 Development</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen1">INTRODUCTION 1</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen2">TRADITIONAL PRODUCT DEVELOPMENT AND VERIFICATION PROCESS</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen3">DEVELOPMENT BENCHES</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen4">ECU SYSTEM AND IT&amp;amp;V TESTING</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen5">INTRODUCTION TO THE ECU VIRTUAL PROTOTYPING [] []</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen6">VIRTUAL PRODUCT DEVELOPMENT AND VERIFICATION PROCESS</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen7">CREATION OF THE VIRTUAL TEST ENVIRONMENT</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen8">USER INTERFACE</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen9">PLANT MODEL</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen10">SIMULATION PLATFORM</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen11">CONNECTING THE VERIFICATION TEST BENCH TO THE VIRTUAL ECU</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen12">COMPARISON: TRADITIONAL TEST BENCH VS VIRTUAL TEST BENCH</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen13">Case Study One: Transmission Management System</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen14">Discrete Outputs</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen15">Discrete Inputs</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen16">BENEFITS TO DATE</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen17">FUTURE INVESTIGATION AND IMPROVEMENTS</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen18">CONCLUSIONS</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen19">ACKNOWLEDGMENTS</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen20">2008-21-0043 Chapter 2 Development</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen21">INTRODUCTION 2</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen22">TRADITIONAL PRODUCT DEVELOPMENT AND VERIFICATION PROCESS 2</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen23">DEVELOPMENT BENCHES</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen24">ECU SYSTEM AND IT&amp;amp;V TESTING</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen25">INTRODUCTION TO THE ECU VIRTUAL PROTOTYPING 3</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen26">VIRTUAL PRODUCT DEVELOPMENT AND VERIFICATION PROCESS 1</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen27">CREATION OF THE VIRTUAL TEST ENVIRONMENT 2</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen28">USER INTERFACE</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen29">PLANT MODEL</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen30">SIMULATION PLATFORM</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen31">CONNECTING THE VERIFICATION TEST BENCH TO THE VIRTUAL ECU
2</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen32">COMPARISON: TRADITIONAL TEST BENCH VS VIRTUAL TEST BENCH 2</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen33">Case Study One: Transmission Management System 2</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen34">Discrete Outputs</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen35">Discrete Inputs</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen36">BENEFITS TO DATE 2</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen37">FUTURE INVESTIGATION AND IMPROVEMENTS</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen38">CONCLUSIONS 2</a>
    </p>
    <p class="level_0">
      <a href="IDSBookout.html#NCXGen39">ACKNOWLEDGMENTS 2</a>
    </p>
  </body>
</html>
private string tocpage = "IDSBooktoc.html";
private string outpage = "IDSBookout.html";
private void Form1_Load(object sender, EventArgs e)
{
    //load toc, only for parsing
    webBrowser2.Visible = false;
    webBrowser2.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser2_DocumentCompleted);
    webBrowser2.DocumentText = File.ReadAllText(tocpage);
}
void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    //Populate treeview
    foreach (HtmlElement ele in webBrowser2.Document.GetElementsByTagName("a"))
    {
        treeView1.Nodes.Add(ele.GetAttribute("href"), ele.InnerText);
    }
    //detach event
    webBrowser2.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(webBrowser2_DocumentCompleted);
    //change webbrowser2 source
    webBrowser2.DocumentText = File.ReadAllText(outpage);
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    string selected = e.Node.Name; //IDSBookout.html#NCXGen0
    string bookmark = selected.Substring(selected.IndexOf("#") + 1);
    webBrowser2.Document.GetElementById(bookmark).ScrollIntoView(true);
    webBrowser2.Visible = true;
}

这是我表单的完整代码,我使用了私有变量" nexturl"(链接是相同的,仅更改书签)。

private Uri nexturl = null;
private void Event_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
    e.Cancel = true;
    nexturl = e.Url;
    webBrowser2.Navigate(new Uri("about:blank"));//necessary, the webbrowser2 don't see that the url has changed
}
private void webBrowser3_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    webBrowser3.Navigating += new WebBrowserNavigatingEventHandler(Event_Navigating);
    webBrowser2.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser2_DocumentCompleted);
}
void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (nexturl != null)
    {
        webBrowser2.Navigate(nexturl);
        nexturl = null;
    }
}
private void Form1_Load(object sender, EventArgs e)
{
    webBrowser3.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser3_DocumentCompleted);
    webBrowser3.Navigate(new Uri("file://" + AppDomain.CurrentDomain.BaseDirectory + "IDSBooktoc.html"));
}

我的代码的差异是您不使用URL来加载页面,而是在WebBrowser2和WebBrowser3中直接设置HTML。

以这种方式尝试:

private string tocpage = "IDSBooktoc.html";
private string outpage = "IDSBookout.html";
private void Form1_Load(object sender, EventArgs e)
{
    webBrowser3.DocumentText = File.ReadAllText(tocpage);
    webBrowser2.DocumentText = File.ReadAllText(outpage);
    webBrowser3.Navigating += new WebBrowserNavigatingEventHandler(webBrowser3_Navigating);
}
private void webBrowser3_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
    e.Cancel = true;
    //scroll webbrowser2
    string bookmark = e.Url.Fragment.Replace("#", "");
    webBrowser2.Document.GetElementById(bookmark).ScrollIntoView(true);
}

最新更新