我目前正在使用具有不同预定义功能的 c# 开发定制的 Web 浏览器。我遇到的问题之一是在状态条上添加进度条。我用来实现此目的的第一种技术是获取webBrowser.Doument.Title并在触发webBrowser_Navigated事件时将其扔到状态条标签上。现在这是可以接受的,因为它工作正常,但是当我决定让我的 webBrowser 能够添加新标签时,我的工作变得更加困难。我使用了扩展网络浏览器让我实现这一点,我在 SO 也发现了这一点。以下是经常让我头疼的问题。我是 c# 的新手,所以对我来说,我认为这个问题非常困难。=)
private void web_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
ExtendedWebBrowser web_navigated = new ExtendedWebBrowser();
statusLoading.Text = "Loading " + ((ExtendedWebBrowser)TabControl1.SelectedTab.Controls[0]);
}
加载标签的文本仅显示选定的选项卡,当您单击其他选项卡时,它仍将显示您之前导航的特定页面的加载状态,而不是您当前所在选项卡的状态。我认为这是无可争辩的,因为我在导航事件上使用了这条线。除了 selectedTab.Controls[0] 之外,我找不到任何其他调用 tabBrowser 的方法。我不确定这里的工作是否以编程方式在每个选项卡上添加一个状态栏,我不知道该怎么做,甚至不知道它是否可能。
既然我已经提到了浏览器上的选项卡,如果我可能会问是否可以在选项卡标题的一侧添加一个加载 gif,指示该选项卡上的浏览器仍在加载?如果有人能教我如何做到这一点,那对我来说是一个巨大的帮助。=)
正如我所说,我正在使用标签来指示我的浏览器正在加载,正如标题所暗示的那样,我希望并且我祈祷我可以让它成为一个进度条。标签的问题在于,当浏览器的页面加载时间过长时,用户会认为我的系统没有做任何事情。
所以这涵盖了所有内容,我感谢所有帮助我解决上一个问题的人,这个问题有点棘手,我希望我把这个问题说得很清楚。这是我用来实例化 ExtendedWebBrowser 的代码,我创建了一个函数“OpenNewTab()”,这样当我调用它时,它会自动生成一个新选项卡和一个浏览器。
private void OpenNewTab(string url, string title="New Tab")
{
web = new ExtendedWebBrowser();
web.ScriptErrorsSuppressed = true;
web.Dock = DockStyle.Fill;
web.Visible = true;
web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted);
web.Navigated += new WebBrowserNavigatedEventHandler(web_Navigated);
web.Navigating += new WebBrowserNavigatingEventHandler(web_Navigating);
InitializeBrowserEvents(web);
TabControl1.TabPages.Add(title + " x");
TabControl1.SelectTab(page_counter);
TabControl1.SelectedTab.Controls.Add(web);
page_counter++;
((WebBrowser)TabControl1.SelectedTab.Controls[0]).Navigate(url);
}
//I am not sure if i should include other browser events here, as you can see the other three are up there. =)
private void InitializeBrowserEvents(ExtendedWebBrowser SourceBrowser)
{
SourceBrowser.NewWindow2 += new EventHandler<NewWindow2EventArgs>(SourceBrowser_NewWindow2);
}
//This event right here is the one responsible for catching the open in a new window and throwing it to a
//new tab, because the open in a new tab is always disabled at web browser i presumed this is the only option they
//have, whoever made the ExtendedWebBrowser I thank you for this code he gains all the credit. =)
private void SourceBrowser_NewWindow2(object sender, NewWindow2EventArgs e)
{
TabPage NewTabPage = new TabPage()
{
Text = "New Tab x"
};
web = new ExtendedWebBrowser()
{
Parent = NewTabPage,
Dock = DockStyle.Fill,
Tag = NewTabPage
};
web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted);
web.Navigated += new WebBrowserNavigatedEventHandler(web_Navigated);
e.PPDisp = web.Application;
InitializeBrowserEvents(web);
TabControl1.TabPages.Add(NewTabPage);
TabControl1.SelectedTab = NewTabPage;
page_counter++;
}