C#用webbrowser制作多页面浏览器

我计划用C#做一个多页面浏览器,现在窗体上有一个textbox1(作地址栏)、button1(做“转到”按钮)、webbrowser1、tabcontrol1四个控件。现... 我计划用C#做一个多页面浏览器,现在窗体上有一个textbox1(作地址栏)、button1(做“转到”按钮)、webbrowser1、tabcontrol1四个控件。现在地址栏中输入网址,点击按钮后,可以打开网页,但是问题来了:多按几次网页里的链接后,则使用tabpage打开,只有新开的tabpage可以显示网页,原先开的tabpage在新一个tabpage生成后,就无法显示网页了,变成一片灰!而且程序不能自动选中新的tabpage,而依旧是旧的tabpage被选中,这样就不像我们平时用的多页面浏览器的效果了呀!我给webbrowser定义了一个NewWindow事件,webbrowser调用该事件,我估计是NewWindow事件出了问题,但是又找不出是什么问题。NewWindow事件具体代码如下:
private void webBrowser1_NewWindow(object sender, CancelEventArgs e)//点击,如果本链接是弹出新窗口,事件就会自动截获。
{
try
{
string strurl = webBrowser1.Document.ActiveElement.GetAttribute("href");

if (!strurl.Contains("://"))
strurl = "http://" + strurl;
this.webBrowser1.Url = new System.Uri(strurl, System.UriKind.Absolute);

tabControl1.TabPages.Add(tabControl1.TabPages.Count.ToString());
webBrowser1.Dock = DockStyle.Fill;
tabControl1.TabPages[tabControl1.TabPages.Count - 1].Controls.Add(webBrowser1);

e.Cancel = true;

}
catch { }
}

现在就想请教各位高手,如何改动以上代码,能使不管新旧的任何一个tabpage都能同时显示网页,而不是只有新tabpage才能显示网页?而且让新的tabpage自动处于选中状态?另外,如何关闭其中的一个tabpage和一次关闭所有的tabpage呢?分别是用什么命令函数?
我知道我提的问题有点多了,所以悬赏50分。高手救救急吧!我停在这上面快一周了,都没有进展,大家帮帮忙。谢谢!!!别人做的C#浏览器源代码我这也有,但是别人的模块、原理和我的比较起来好像差别挺大的,不能直接套用。
我的邮箱:panweikl@163.com
展开
 我来答
深见四瓜1w
推荐于2017-11-23
知道答主
回答量:21
采纳率:0%
帮助的人:26.2万
展开全部
我有一个我自己做的你留邮箱我给你
关于你的问题,我不知道你注意没有tabpage有一个属性是用来储存当前获得焦点的那个页面的索引值的。你只要建立一个泛型的浏览器集合(用list)
List<ExtendedWebBrowser> webNew = new List<ExtendedWebBrowser>();//构造一个泛型列表来管理浏览器控件
关闭当前的tabpage 你可以这样:
this.webNew[tabControl1.SelectedIndex].Dispose ( );//析构当前浏览器
this.webNew.Remove ( this.webNew[tabControl1.SelectedIndex] );
tabControl1.TabPages[tabControl1.SelectedIndex].Dispose ( );//析构当前标签页
这样我们就能进行匿名处理这些个浏览器控件了
这个方法绝对可行我告诉你,因为我就这样做的。(现在只差最难的收藏夹了)
一定要用List,因为list是动态数组,它的索引时可变化的,如果你拿array来定义集合就糟糕了。。。

我有全套源码,留邮箱吧
百度网友96ffcf7
推荐于2016-07-11 · 知道合伙人互联网行家
百度网友96ffcf7
知道合伙人互联网行家
采纳数:22721 获赞数:118725
从事多年网络方面工作,有丰富的互联网经验。

向TA提问 私信TA
展开全部

首先在窗体中添加一个combox和一个webbrowser,代码如下

初始化:

Code

前进浏览comboBox1.text代表的url

1  private void button1_Click(object sender, EventArgs e)
2        {
3            string url = comboBox1.Text.Trim();
4
5            webBrowser1.Navigate(url);
6        }

返回前一个浏览的网页

1//后退
2        private void button2_Click(object sender, EventArgs e)
3        {
4            webBrowser1.GoBack();
5
6        }

点击网页中的链接,不在启动IE,而是使用webbrowser继续浏览

Code4

//每次浏览网页后,combox_url中的文本变成当前网页的url

 private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)        
 {            
 comboBox1.Text = webBrowser1.Url.ToString();       
  }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
taonylu
2010-06-04 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:98.2万
展开全部
当你截获webBrowser1中点击的链接的时候
tabcontrol中添入tabpage并置为选中
在这个新tabpage中加入一个新的webBrowser并使其的
导航uri为你捕获的链接
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
曷凡
2010-06-04 · TA获得超过936个赞
知道小有建树答主
回答量:497
采纳率:0%
帮助的人:566万
展开全部
你写的太长 没仔细看
但是我想问题应该出在这里
你所使用的所有的tabpages都装载着同一个webBrowser1对吧
这样的话....
在你所打开的tabpage里不论那个转向,都会引起webBrowser1的变化对吧?
这样问题不是出来了么?

至于选中问题,直接tabcontrols.selectindex=tabControl1.TabPages.Count-1
这样就能搞定

关闭也是一样的做法,通过TabPages.Count遍历tabControl1.pages,我没关过pages
但是我十分肯定有这样的方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
所千凡u8
2010-06-05 · TA获得超过132个赞
知道答主
回答量:162
采纳率:0%
帮助的人:0
展开全部
来梦想黑客联盟学习 信息来源:梦想黑客联盟
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式