下面的**假設你已經建立了乙個windows form,上面有乙個webbrowser名為「webbrowser」。
study case 1:用winform的event handler響應web頁面的事件但是,在.net 2.0當中,「由windows form響應web頁面的事件」已經成為了現實。
在.net 2.0中,整個html文件以及其包含的各個html元素,都和乙個個htmldocument、htmlelement之類的.net物件對應。因此只要找到這個「關閉」按鈕對應的htmlelement物件,為其click事件新增event handler即可。
假設html源**如下:
那麼找出該按鈕並為之新增event handler的**如下:
htmldocument htmldoc = webbrowser.document;
htmlelement btnelement = htmldoc.all["btnclose"];
if (btnelement != null)
其中htmlbtnclose_click是按下web按鈕時的event handler。
很簡單吧?那麼稍稍高階一點的——我們都知道乙個html元素可能有很多各種各樣的事件,而htmlelement這個類只給出最常用、共通的幾個。那麼,如何響應其他事件呢?這也很簡單,只需要呼叫htmlelement的attacheventhandler就可以了:
btnelement.attacheventhandler("onclick", new eventhandler(htmlbtnclose_click));
//這一句等價於上面的btnelement.click += new htmlelementeventhandler(htmlbtnclose_click);
把"onclick"換成其他事件的名字就可以了。例如:
formelement.attacheventhandler("onsubmit", new eventhandler(htmlform_submit));
study case 2:表單(form)的自動填寫和提交
要使我們的webbrowser具有自動填表、甚至自動提交的功能,並不困難。
假設有乙個最簡單的登入頁面,輸入使用者名稱密碼,點「登入」按鈕即可登入。已知使用者名稱輸入框的id(或name,下同)是username,密碼輸入框的id是password,「登入」按鈕的id是submitbutton,那麼我們只需要在webbrowser的documentcompleted事件中使用下面的**即可:
htmlelement btnsubmit = webbrowser.document.all["submitbutton"];
htmlelement tbuserid = webbrowser.document.all["username"];
htmlelement tbpasswd = webbrowser.document.all["password"];
if (tbuserid == null || tbpasswd == null || btnsubmit == null)
return;
tbuserid.setattribute("value", "smalldust");
tbpasswd.setattribute("value", "12345678");
btnsubmit.invokemember("click");
這裡我們用setattribute來設定文字框的「value」屬性,用invokemember來呼叫了按鈕的「click」方法。因為不同的html元素,其擁有的屬性和方法也不盡相同,所以.net 2.0提供了統一的htmlelement來概括各種html元素的同時,提供了這兩個方法以呼叫元素特有的功能。關於各種html元素的屬性和方法一覽,可以查閱msdn的dhtml reference
。※關於表單的提交,的確還有另一種方法就是獲取form元素而不是button,並用form元素的submit方法:
htmlelement formlogin = webbrowser.document.forms["loginform"];
//……
formlogin.invokemember("submit");
本文之所以沒有推薦這種方法,是因為現在的網頁,很多都在submit按鈕上新增onclick事件,以對提交的內容做最基本的驗證。如果直接使用form的submit方法,這些驗證**就得不到執行,有可能會引起錯誤。
study case 3:查詢並選擇文字
這次我們希望實現乙個和ie一模一樣的查詢功能,以對web頁面內的文字進行查詢。
文字查詢要借助於textrange物件的findtext方法。但是,.net裡並沒有這個物件。這是因為,.net 2.0提供的htmldocument,htmlwindow,htmlelement等類,只不過是對原有mshtml這個com元件的不完整封裝,只提供了mshtml的部分功能。所以許多時候,我們仍舊要借助mshtml來實現我們需要的功能。好在這些.net類都提供了domdocument這個屬性,使得我們很容易把.net物件轉換為com物件使用。下面的**演示了如何查詢web頁面的文字。
(需要新增mshtml的引用,並加上using mshtml;)
public partial class searchdemo : form
private void btnsearch_click(object sender, eventargs e)
else
// 如果找到了,就選取(高亮顯示)該關鍵字;否則彈出訊息。
if (searchrange.findtext(keyword, 1, 0))
else
}
}到此為止,簡單的查詢就搞定了。至於替換功能,看了下乙個例子,我相信你就可以觸類旁通輕鬆搞定了。
C 實現網頁表單自動提交
最近乙個專案要用到表單自動提交知識,自己先拿126郵箱練下手,用webbrowser控制項實現126郵箱的自動登入。首先,設計乙個簡單的form介面,好直觀的檢視登入情況,介面如圖下圖所示 然後在 webbrowser1 documentcompleted函式中新增如下 private void w...
ajax實現表單提交
眾所周知現在的各大 基本都設有檔案上傳功能,使用者可以把自己喜歡的或其他檔案放在網上存起來,以便以後用的時候方便去找,可是乙個網頁的檔案上傳功能究竟該怎麼去設定呢?今天我就以上傳為例向大家展示檔案上傳功能的具體步驟。其實檔案上傳有兩種方法,一種是from表單submit提交,一種是ajax實現非同步...
ajax實現form表單提交
最終整理了一下 能夠完美實現要求。不重新整理提交表單,只提交一次,中文不亂嗎。html 部分 form input type text name link name id link name placeholder 如 言曌部落格 required required input type text ...