程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 使用VS2005打造簡單分頁浏覽器

使用VS2005打造簡單分頁浏覽器

編輯:C#基礎知識

  引言

  很早就有搞一個浏覽器的想法了,在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

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 下一頁
  • 尾頁
  • 共3頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved