在C#winforms中,在同一表单上从一个webBrowser导航到另一个webBrowser

在C#winforms中,在同一表单上从一个webBrowser导航到另一个webBrowser,c#,winforms,browser,C#,Winforms,Browser,我有一个名为webBrowser3的webBrowser,它显示指向HTML文件内容的链接。示例:-一个WebBrowser(webBrowser3)显示目录(TOC),我希望在我单击的任何章节或其部分上,它在另一个WebBrowser(webBrowser2)上显示其内容,该WebBrowser以webBrowser3的相同形式放置。我制作了目录(TOC),但当点击任何章节时,它会在放置TOC的同一个webBrowser(webBrowser3)上显示其内容。 我用下面的方法试过,但没有达到预

我有一个名为webBrowser3的webBrowser,它显示指向HTML文件内容的链接。示例:-一个WebBrowser(webBrowser3)显示目录(TOC),我希望在我单击的任何章节或其部分上,它在另一个WebBrowser(webBrowser2)上显示其内容,该WebBrowser以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>

目录
h1{文本对齐:居中}
p{文本对齐:左}
p、 级别0{文本缩进:0em}
p、 级别_1{文本缩进:1em}
目录


这是我表单的完整代码,我使用了私有变量“nexturl”,因为当我单击webbrowser3上的链接时,webbrowser2似乎没有检测到url已更改(链接相同,仅更改书签)


我的代码和您的代码的区别在于,您不使用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);
}

在我的代码中,不会调用事件导航方法。在发布代码之前,我已在电脑上尝试过该代码。你能提供一个html文件吗?如果你调试这个项目,会调用webBrowser3\u DocumentCompleted事件?我已经添加了我的html。我希望你能得到我想要的。。在这个html中,我有一些指向另一个html文件的链接。我把它放在webBrowser3中,如果我点击这个HTML文件中的任何链接,我想在webBrowser2中打开它的内容。这两个浏览器都放在一张表格上我还有一个问题。。如果不是webbrowser3,我使用treeview,那么它也会工作吗?如果我使用treeview,那么为了从treeview导航到webbrowser,我应该触发哪个事件?尝试AfterSelect事件你能为treeview编写代码吗?我面临一些问题,我的节点在treeview中出现了两次。示例:-我的树状视图的结构是-引言1-传统产品开发和验证过程-引言1-传统产品开发和验证过程,但它应该类似于-引言1-删除时的传统产品开发和验证过程“webBrowser2.DocumentCompleted+=新的WebBrowserDocumentCompletedEventHandler(webBrowser2\u DocumentCompleted);“那么我的问题就解决了。但我不明白为什么我们要用代码写这行。你能解释一下这行代码的用法吗?我写这行代码是因为我首先使用webbrowser2解析toc文件。在我的代码中,我:1)读取html文件2)ondocumentcompleted事件填充treeview 3)detach事件,因为我不需要它。也许你在另一个事件中解析你的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);
}
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;
}