频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源: 作者: 出处:巧巧读书 2005-12-26 进入讨论组
下一页 1 2 3 
谢 谢 收 藏 http://www.qqread.com/csharp/u142178000.html
引言

  很早就有搞一个浏览器的想法了,在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()为获取当前浏览器。 更多文章 更多内容请看浏览器安全隐患及对策专题,或进入讨论组讨论。
下一页 1 2 3 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章