C 實現表單提交(1)

2022-09-06 04:03:07 字數 2966 閱讀 5783

下面的**假設你已經建立了乙個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 ...