雖然現在的瀏覽器已經有很多種不同的系統,但若能開發一個量身訂做的瀏覽器時,在操作使用上會更得心應手吧!加上筆者最近寫了「開心農場瀏覽器」,因此就有些網友來信問說如何寫類似的程式。但是要從無到有開發出一個瀏覽器並不是簡單的事,不過若使用 .NET 內建的 WebBrowser 元件的話,保障在開發上能事半功倍。
一樣是先快速的把畫面排出來,這邊使用到 5 個 Button(按鈕) 來當做執行上一頁、下一頁、重新整理、停止及首頁用,接著再放上 Label(標籤)、TextBox(文字輸入框) 及 Button(按鈕) 用來讓使用者輸入網址後並前往用,當然最重要的 WebBrowser(瀏覽器) 可別忘記要一起放在 Form(表單) 上喔。
在放置 WebBrowser(瀏覽器) 的時候要注意一下,它的 Dock 屬性預設是 Fill,它可會是佔滿整個 Form(表單) 的,因此先把它設成 None 後再來手動調整大小及位置。畫面都排版好之後,就讓我們開始來 DIY 專屬瀏覽器囉。
首先當 WebBrowser(瀏覽器) 執行時,筆者希望預設能連到某網址,所以就咱們就要在 Form(表單) 載入時來做設定:
1 2 3 4 | private void Form1_Load(object sender, EventArgs e) { // 預設載入的頁面 webBrowser1.Navigate("http://abgne.tw"); } |
要讓 WebBrowser(瀏覽器) 連到某網址時可以用 Navigate(網址) 來執行動作。
接下來讓我們一口氣來完成上一頁、下一頁、重新整理、停止及首頁等功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | private void backBtn_Click(object sender, EventArgs e) { // 上一頁 webBrowser1.GoBack(); } private void forwardBtn_Click(object sender, EventArgs e) { // 下一頁 webBrowser1.GoForward(); } private void refreshBtn_Click(object sender, EventArgs e) { // 重新整理 webBrowser1.Refresh(); } private void stopBtn_Click(object sender, EventArgs e) { // 停止 webBrowser1.Stop(); } private void homeBtn_Click(object sender, EventArgs e) { // 首頁 webBrowser1.GoHome(); } |
透過 WebBrowser(瀏覽器) 內建方法就能輕鬆達到各種指令,像是回首頁也只是 GoHome() 就可以囉。但我們所使用的是 .NET 所提供的元件,因此這邊的首頁設定就是跟 IE 瀏覽器一樣的。
完成以上動作之後,再來要做的就是輸入要瀏覽的網址後並前往:
1 2 3 4 5 6 7 8 9 10 11 | private void goBtn_Click(object sender, EventArgs e) { // 前往網址輸入框中的網址 webBrowser1.Navigate(textBox1.Text); } private void textBox1_KeyUp(object sender, KeyEventArgs e) { // 如果在網址輸入框中按下 Enter 則前往網址輸入框中的網址 if(e.KeyCode == Keys.Enter) { webBrowser1.Navigate(textBox1.Text); } } |
當按下前往的 Button(按鈕) 後就能使用 Navigate(網址) 來連到輸入框中所輸入的網址;除了透過按鈕前往之外,使用者也可能直接輸入完網址後就直接按下 Enter 鈕,所以筆者也針對輸入框的 KeyUP 事件加上 Enter 鈕的判斷。
目前寫到這邊已經算是完成一個簡單且基本的瀏覽器了,但不知道各位有沒有注意到當我們瀏覽到不同網頁時,我們的輸入框中的網址並沒有跟著改變呢?!筆者希望當網頁改變並載入完後就顯示新的網址,所以我們得在 WebBrowser(瀏覽器) 的 DocumentCompleted 事件上加入指定的程式:
1 2 3 4 | private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { // 把目前的網址顯示在網址輸入框中 textBox1.Text = webBrowser1.Url.ToString(); } |
現在整個完成後,就是一個較完整的瀏覽器囉~
如果還要能控制網頁或是做一些能自動控制功能的話,當然得再這基礎上加上更多的程式功能才行。接下來會用實際的網頁範例來實做出來。
真酷..
我也想試看看
但是學校只有交 VB2008
也只有VB2008 可以玩..
還要考FOR NEXT的迴圈...
很複雜@@..
其實 VB.NET 跟 C# 只是差在一些寫法不同而已,這些元件內建的方法都是一樣的,你參考看看並試著動手改一改。
若有問題可以提出來討論~~
嗯嗯..
真的都差不多..
我用出來了
只是有一點小LAG
載入網頁 按鈕就不能用=.=
用webBrowse做出來的幾乎不能算是自己的瀏覽器了
因為webBrowse控制項是直接用IE的核心
建議想學寫瀏覽器人可以參考Firefox的原始碼
嗯嗯~~一開始就有提到要從無到有寫出一個瀏覽器並不是一件簡單的事
若使用 WebBrowser 則是能節省很多時間的....
另外,所謂的專屬瀏覽器並不一定是要一個跟現有的核心有所不同
也許是有自己需要的功能等等..
問一下哦~
妳那開心農場畫面怎變大的?
方法很多種...其實一種比較簡單的是先取得其網頁內容後再輸出
哇!好棒喔~
我的VB不知道哪時候做得出來XD
VB 的用法其實也差不多耶...因為這是基本的@@
針對製作這個 需要具備哪個 軟體來執行了
我還是新手不是很懂 希望能有大大教學一下
軟體嗎..?你可以到微軟下載免費版的 Visual Studio Express 版來玩看看..
或是一樣是免費的 SharpDevelop
這個 不同電腦 不同螢幕 用出來的大小 都是固定的嗎?
跟電腦解析度有關西嗎?
你要問的是什麼大小呢...?
您好!! 男丁格爾
想請教您 , 如果取得其網頁內容後再輸出後 , Flash部分要如何做處理 , 可讓畫面拉到最大 ?
輸出時應該就能改變 flash 的寬跟高了..
但雖然能把 swf 整個變大...但遊戲畫面是否能跟著變大就要看設計者的設定了
以開心農場為例,想請教您,如果已取得WebBrowser物件內Flash部份的Handle,可以透過指令使Flash Fit WebBrowser物件的大小嗎?
我是從網頁原始碼下手的~
您好.我的問題可能有點複雜請耐心看一下...
請問我是新手目前還在自學C#..我用winfrom做了一個查詢的程式有Form1,Form2在Form1裡面有textbox.richtextbox做一個查詢按下Button以後送出查詢,在richtextbox顯示。這部分都沒有問題,但是後來我增加了combobox.想做成條件篩選我不太懂switch..case.裡面該怎麼設定會我在[設計畫面]點選combobox編輯項目裡面增加了=.%LIKE.LIKE%.%LIKE%我想要做到條件=的時候直接在Form1的richtextbox顯示相關訊息,條件是%LIKE或LIKE%,%LIKE%的時候按下Button跳出From2,From2裡面只有一個DataGridView將相關的資料顯示出來,我比較有問題的地方是Switch..case這部分我的程式碼
private void btnSelect_Click(object sender, EventArgs e)
{
using (SqlConnection cn = new SqlConnection())
{
int index; //問題點
index = cob.SelectedIndex.ToString; //問題點
string searchName = txtName.Text;
switch (index)
{
case "0": //問題點
string selectCmd = "SELECT * FROM [TEST].[dbo].[INVMB] MB001 ='" + searchName + "'";
SqlCommand cmd = new SqlCommand(selectCmd, cn);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
rtbShow.Text="品號:" +"\t"+dr["MB001"]+"\n";
rtbShow.Text+="品名"+ "\t"+dr["MB002"]+"\n";
.
.
}else{
rtbShow.Text="找不到這個資料!";
}
break;
case "1":
...//如何開啟From2
..
break;
我按下F5以後就會出現下面的錯誤訊息
無法將型別stringu隱含轉換成int
一只搞不懂哪裡錯了...
問題1.我index宣告成string也過不了char也過不了需要宣告成什麼?
問題2....switch...case...在case "":<=這裡因該要填寫0.1.2.3還是都可以自己設定?
問題3.如果我下拉式選單選到%LIKE.LIKE%.%LIKE%時如何跳出From2在DataGirdView顯示?
非常感謝~~~~如有刁擾之處請見諒
先一個一個來...你index宣告成int...那你在下一行接到的是string...
看是要把string先轉成int或是直接用string
另外,ToString是不是要加個()呢..:D