• [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()为获取当前浏览器。
  • 相关阅读:
    linux ubuntu 中文汉化
    微信内核浏览器一些用法
    struts2解耦和获取提交的值
    html背景图片自适应
    Heroku 云服务部署流程
    mac 遇到的奇怪问题?
    h5完美实现无刷新上传并附带上传效果
    ionic 实现 应用内(webview中html页面点击) 和 应用外 (浏览器html页面点击) 打开本地安装应用
    ionic 实现微信朋友圈分享的完整开发流程
    OpenGL ES学习笔记(三)——纹理
  • 原文地址:https://www.cnblogs.com/godwar/p/1106044.html
Copyright © 2020-2023  润新知