[ZT]使用VS2005打造简单分页浏览器

引言

  很早就有搞一个浏览器的想法了,在vs2003上就试图做过,苦于经常会有这种情况出现:当自治的浏览器遇到弹出窗口时无法捕获新的弹出窗口,于是乎新的弹出窗口仍旧用ie(或其他系统默认浏览器)打开,在研究vs2005的WebBrowser控件时发现有NewWindow事件,于是乎兴奋不已,决定用这个分页浏览器体验一下vs2005。

  实现功能

  预览图如下:


(图片较大,请拉动滚动条观看)

  当前浏览器的"另存为","打印","打印御览","页面设置",刷新,前进,后退等等。几乎都是控件封装好了的,没有几句代码。

  浏览器的分页功能。当浏览器有NewWindow激发时产生新的一页。主要依靠NewWindow事件。

  当前页面的状态。例如标题,状态栏等。

  实现过程以及关键点

  新建一个vs2005的windows applaction项目

  界面

   一个MenuStrip实现最上面的菜单。

   两个ToolStrip分别是工具栏和地址栏。

   一个TabControl也就是浏览器的主体了,它的每个TabPage就是每一个分页了。

   一个StatusStrip也就是状态栏了。

   另外为了使窗体大小变化时控件也随着变化注意使用控件的dock属性。

  搭成如下界面:


(图片较大,请拉动滚动条观看)

  顺便说一句和vs2003不同的是vs2005把例如

this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.saveasToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.printToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.printPreToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();

  这些通过我们拖拽控件,系统生成的界面代码分离出来统一放在叫*.Designer.cs文件里了,详见事例代码中的Form1.Designer.cs文件。

  辅助方法

#region //辅助方法
/// <summary>
/// 当在浏览器地址栏敲"回车"时当前浏览器重定向到指定url(tscbUrl.Tex)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tscbUrl_KeyDown(object sender, KeyEventArgs e)
{
 if (e.KeyCode == Keys.Enter)
 {
  newCurrentPageUrl(tscbUrl.Text);
 }
}
/// <summary>
/// 新建空白页
/// </summary>
private void newPage()
{
 tscbUrl.Text = "about:blank";
 TabPage mypage = new TabPage();
 WebBrowser tempBrowser = new WebBrowser();
 tempBrowser.Navigated += new WebBrowserNavigatedEventHandler(tempBrowser_Navigated);
 tempBrowser.NewWindow += new CancelEventHandler(tempBrowser_NewWindow);

 tempBrowser.ProgressChanged += new WebBrowserProgressChangedEventHandler(tempBrowser_ProgressChanged);
 tempBrowser.StatusTextChanged += new EventHandler(tempBrowser_StatusTextChanged);
 tempBrowser.Dock = DockStyle.Fill;
 mypage.Controls.Add(tempBrowser);

 tabControl1.TabPages.Add(mypage);
 tabControl1.SelectedTab = mypage;
}
/// <summary>
/// 临时浏览器进度变化事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void tempBrowser_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
{
 toolStripProgressBar1.Maximum = (int)e.MaximumProgress;
 toolStripProgressBar1.Value = (int)e.CurrentProgress;
}
/// <summary>
/// 新建一页并定向到指定url
/// </summary>
/// <param name="address">新一页的浏览器重新定向到的url</param>
private void newPage(string address)
{
 TabPage mypage = new TabPage();
 WebBrowser tempBrowser = new WebBrowser();
 tempBrowser.Navigated += new WebBrowserNavigatedEventHandler(tempBrowser_Navigated);
 tempBrowser.NewWindow += new CancelEventHandler(tempBrowser_NewWindow);
 tempBrowser.StatusTextChanged += new EventHandler(tempBrowser_StatusTextChanged);
 tempBrowser.ProgressChanged += new WebBrowserProgressChangedEventHandler(tempBrowser_ProgressChanged);
 tempBrowser.Url = getUrl(address);
 tempBrowser.Dock = DockStyle.Fill;
 mypage.Controls.Add(tempBrowser);
 tabControl1.TabPages.Add(mypage);
}
/// <summary>
/// 获取当前浏览器
/// </summary>
/// <returns>当前浏览器</returns>
private WebBrowser getCurrentBrowser()
{
 WebBrowser currentBrowser = (WebBrowser)tabControl1.SelectedTab.Controls[0];
 return currentBrowser;
}
/// <summary>
/// 处理字符串为合法url
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
private Uri getUrl(string address)
{
 string tempaddress = address;
 if ((!address.StartsWith("http://")) && (!address.StartsWith("https://")) && (!address.StartsWith("ftp://")))
 {
  tempaddress = "http://" + address;
 }
 Uri myurl;
 try
 {
  myurl = new Uri(tempaddress);
 }
 catch
 {
  myurl = new Uri("about:blank");
 }
 return myurl;
}
/// <summary>
/// 截取字符串为指定长度
/// </summary>
/// <param name="oldstring"></param>
/// <returns></returns>
private string newstring(string oldstring)
{
 string temp;
 if (oldstring.Length < TITLE_COUNT)
 {
  temp = oldstring;
 }
 else
 {
  temp = oldstring.Substring(0, TITLE_COUNT);
 }
 return temp;
}
/// <summary>
/// 设置"前进","后退"button的可用状态
/// </summary>
private void setStatusButton()
{
 backButton.Enabled = getCurrentBrowser().CanGoBack;
 forwordButton.Enabled = getCurrentBrowser().CanGoForward;
}
#endregion

  说明:其中getCurrentBrowser()是获取当前页面的浏览器,这里把它叫当前浏览器,即getCurrentBrowser()为获取当前浏览器。
原文地址:https://www.cnblogs.com/godwar/p/1106044.html