使用VS2005打造简单分页浏览器
发表于:2007-06-21来源:作者:点击数:
标签:
下一页 1 2 3 引言 很早就有搞一个浏览器的想法了,在vs2003上就试图做过,苦于经常会有这种情况出现:当自治的浏览器遇到弹出窗口时无法捕获新的弹出窗口,于是乎新的弹出窗口仍旧用ie(或其他系统默认浏览器)打开,在研究vs2005的WebBrowser控件时发现有N
下一页 1 2 3
引言
很早就有搞一个浏览器的想法了,在vs2003上就试图做过,苦于经常会有这种情况出现:当自治的浏览器遇到弹出窗口时无法捕获新的弹出窗口,于是乎新的弹出窗口仍旧用ie(或其他系统默认浏览器)打开,在研究vs2005的WebBrowser控件时发现有NewWindow事件,于是乎兴奋不已,决定用这个分页浏览器体验一下vs2005。
实现功能
预览图如下:
当前浏览器的"另存为","打印","打印御览","页面设置",刷新,前进,后退等等。几乎都是控件封装好了的,没有几句代码。
浏览器的分页功能。当浏览器有NewWindow激发时产生新的一页。主要依靠NewWindow事件。
当前页面的状态。例如标题,状态栏等。
实现过程以及关键点
新建一个vs2005的windows applaction项目
界面
一个MenuStrip实现最上面的菜单。
两个ToolStrip分别是工具栏和地址栏。
一个TabControl也就是浏览器的主体了,它的每个TabPage就是每一个分页了。
一个StatusStrip也就是状态栏了。
另外为了使窗体大小变化时控件也随着变化注意使用控件的dock属性。
搭成如下界面:
顺便说一句和vs2003不同的是vs2005把例如
clearcase/" target="_blank" >cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
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()为获取当前浏览器。
|
原文转自:http://www.ltesting.net