国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

c#winform使用WebBrowser 大全[超長文轉(zhuǎn)載]

2019-11-17 02:56:43
字體:
供稿:網(wǎng)友
c#winform使用WebBrowser 大全[超長文轉(zhuǎn)載]

1、主要用途:使用戶可以在窗體中導(dǎo)航網(wǎng)頁。

2、注意:WebBrowser控件會(huì)占用大量資源。使用完該控件后一定要調(diào)用Dispose方法,以便確保及時(shí)釋放所有資源。必須在附加事件的同一線程上調(diào)用Dispose方法,該線程應(yīng)始終是消息或用戶界面(UI)線程。

3、WebBrowser使用下面的成員可以將控件導(dǎo)航到特定URL、在導(dǎo)航歷史記錄列表中向后和向前移動(dòng),還可以加載當(dāng)前用戶的主頁和搜索頁:

1.URL屬性:可讀、可寫,用于獲取或設(shè)置當(dāng)前文檔的URL。 

WebBrowser控件維護(hù)瀏覽會(huì)話期間訪問的所有網(wǎng)頁的歷史記錄列表。設(shè)置Url屬性時(shí),WebBrowser控件導(dǎo)航到指定的URL并將該URL添加到歷史記錄列表的末尾。

WebBrowser控件在本地硬盤的緩存中存儲(chǔ)最近訪問過的站點(diǎn)的網(wǎng)頁。每個(gè)頁面都可以指定一個(gè)到期日期,指示頁面在緩存中保留的時(shí)間。當(dāng)控件定位到某頁時(shí),如果該頁具有緩存的版本,則直接顯示緩存中的內(nèi)容而不必重新下載該頁,從而節(jié)省了時(shí)間。使用Refresh方法強(qiáng)制WebBrowser控件通過下載來重新加載當(dāng)前頁,從而確保控件顯示最新版本。

注意:即使已請求了另一個(gè)文檔,該屬性也包含當(dāng)前文檔的URL。如果設(shè)置該屬性的值,然后立即再次檢索該值,要是WebBrowser控件尚未來得及加載新文檔,則檢索到的值可能與設(shè)置的值不同。

2.Navigate方法:將指定位置的文檔加載到WebBrowser控件中。

3.GoBack方法:如果導(dǎo)航歷史記錄中的上一頁可用,則將WebBrowser控件導(dǎo)航到該頁。

如果導(dǎo)航成功,則返回true;如果導(dǎo)航歷史記錄中的上一頁不可用,則返回false。

WebBrowser控件維護(hù)瀏覽會(huì)話期間訪問的所有網(wǎng)頁的歷史記錄列表。可以使用GoForward方法實(shí)現(xiàn)一個(gè)“后退”按鈕。

使用CanGoBack屬性確定導(dǎo)航歷史記錄是否可用以及是否包含上一頁。處理CanGoBackChanged事件,在CanGoBack屬性值更改時(shí)接收通知。

4.GoForward方法:如果導(dǎo)航歷史記錄中的下一頁可用,則將WebBrowser控件導(dǎo)航到該頁。

如果導(dǎo)航成功,則返回true;如果導(dǎo)航歷史記錄中的下一頁不可用,則返回false。

WebBrowser控件維護(hù)瀏覽會(huì)話期間訪問的所有網(wǎng)頁的歷史記錄列表。可以使用GoForward方法實(shí)現(xiàn)一個(gè)“前進(jìn)”按鈕.

使用CanGoForward屬性確定導(dǎo)航歷史記錄是否可用以及是否包含當(dāng)前頁之后的頁。處理CanGoForwardChanged事件,在CanGoForward屬性值更改時(shí)接收通知

  5.GoHome方法:將WebBrowser控件導(dǎo)航到當(dāng)前用戶的主頁。

  6.GoSearch方法:將WebBrowser控件導(dǎo)航到當(dāng)前用戶的默認(rèn)搜索頁。

    默認(rèn)搜索頁存儲(chǔ)在注冊表的HKEY_CURRENT_USER/Software/Microsoft/InternetExplorer/Main/SearchPage注冊表項(xiàng)下。

    若要使用其他搜索頁而不是默認(rèn)搜索頁,請調(diào)用Navigate方法或指定Url屬性。

  7.Refresh方法:重新加載當(dāng)前顯示在WebBrowser控件中的文檔。

  8.Stop方法:取消所有掛起的導(dǎo)航并停止所有動(dòng)態(tài)頁元素(如背景聲音和動(dòng)畫)。

如果導(dǎo)航不成功,則顯示一頁指示出現(xiàn)的問題。使用這些成員中的任何一個(gè)進(jìn)行導(dǎo)航都會(huì)導(dǎo)致在導(dǎo)航的不同階段發(fā)生Navigating、Navigated和DocumentCompleted事件。

4、ObjectForScripting屬性:獲取或設(shè)置一個(gè)對象,該對象可由顯示在WebBrowser控件中的網(wǎng)頁所包含的腳本代碼訪問。

使用該屬性啟用WebBrowser控件承載的網(wǎng)頁與包含WebBrowser控件的應(yīng)用程序之間的通信。使用該屬性可以將動(dòng)態(tài)HTML(DHTML)代碼與客戶端應(yīng)用程序代碼集成在一起。為該屬性指定的對象可作為window.external對象(用于主機(jī)訪問的內(nèi)置DOM對象)用于網(wǎng)頁腳本。

可以將此屬性設(shè)置為希望其公共屬性和方法可用于腳本代碼的任何COM可見的對象。可以通過使用ComVisibleAttribute對類進(jìn)行標(biāo)記使其成為COM可見的類。

若要從客戶端應(yīng)用程序代碼調(diào)用網(wǎng)頁中定義的函數(shù),請使用可從Document屬性檢索的HtmlDocument對象的HtmlDocument.InvokeScript方法。

5、AllowNavigation屬性:獲取或設(shè)置一個(gè)值,該值指示控件在加載其初始頁之后是否可以導(dǎo)航到其他頁。

6、AllowWebBrowserDrop屬性:獲取或設(shè)置一個(gè)值,該值指示W(wǎng)ebBrowser控件是否導(dǎo)航到拖放到它上面的文檔。

7、WebBrowserShortcutsEnabled屬性:是否啟用WebBrowser自帶的快捷鍵。

8、ScriptErrorssupPRessed屬性:獲取或設(shè)置一個(gè)值,該值指示出現(xiàn)腳本錯(cuò)誤時(shí),WebBrowser控件是否顯示錯(cuò)誤對話框。

9、IsWebBrowserContextMenuEnabled屬性:是否啟用右鍵菜單。

源:MSDNhttp://msdn.microsoft.com/zh-cn/library/system.windows.forms.webbrowser(v=vs.80).aspx

C#WinFormWebBrowser(二)實(shí)用方法總結(jié)

實(shí)用方法1:獲取狀態(tài)欄信息

voidwebBrowser1_StatusTextChanged(objectsender,EventArgse) { label1.Text=webBrowser1.StatusText; }

實(shí)用方法2:頁面跳轉(zhuǎn)后改變地址欄地址

//在Navigated事件處理函數(shù)中改變地址欄地址是最恰當(dāng)?shù)模?privatevoidwebBrowser1_Navigated(objectsender,WebBrowserNavigatedEventArgse) { textBox1.Text=webBrowser1.Url.ToString(); }

實(shí)用方法3:設(shè)置單選框

//建議使用執(zhí)行單擊事件的方式來設(shè)置單選框,而不是修改屬性: webBrowser1.Document.GetElementById("RBT_A").InvokeMember("click");

實(shí)用方法4:設(shè)置聯(lián)動(dòng)型下拉列表

//比較常見的聯(lián)動(dòng)型多級下拉列表就是省/市縣選擇了,這種情況下直接設(shè)置選擇項(xiàng)的屬性不會(huì)觸發(fā)聯(lián)動(dòng),需要在最后執(zhí)行觸發(fā)事件函數(shù)才能正常工作:foreach(HtmlElementfins.GetElementsByTagName("option")) { if(f.InnerText=="北京") { f.SetAttribute("selected","selected"); } else { f.SetAttribute("selected",""); } } s.RaiseEvent("onchange");

以上四種方法轉(zhuǎn)于:http://www.survivalescaperooms.com/SkyD/archive/2009/04/23/1441696.html

實(shí)用方法一:在WinForm中相應(yīng)Web事件 假設(shè)HTML源代碼如下:

<html> <body> <inputtype="button"id="btnClose"value="關(guān)閉"/> </body> </html>

HtmlDocumenthtmlDoc=webBrowser.Document; HtmlElementbtnElement=htmlDoc.All["btnClose"]; if(btnElement!=null) { btnElement.click+=newHtmlElementEventHandler(HtmlBtnClose_Click); }

//很簡單吧?那么稍稍高級一點(diǎn)的——我們都知道一個(gè)HTML元素可能有很多各種各樣的事件,而HtmlElement這個(gè)類只給出最常用、共通的幾個(gè)。那么,如何響應(yīng)其他事件呢?這也很簡單,只需要調(diào)用HtmlElement的AttachEventHandler就可以了:

btnElement.AttachEventHandler("onclick",newEventHandler(HtmlBtnClose_Click)); //這一句等價(jià)于上面的btnElement.click+=newHtmlElementEventHandler(HtmlBtnClose_Click);

對于其他事件,把"onclick"換成該事件的名字就可以了。例如:

formElement.AttachEventHandler("onsubmit",newEventHandler(HtmlForm_Submit));

實(shí)用方法二:模擬表單自動(dòng)填寫和提交

假設(shè)有一個(gè)最簡單的登錄頁面,輸入用戶名密碼,點(diǎn)“登錄”按鈕即可登錄。已知用戶名輸入框的id(或Name,下同)是username,密碼輸入框的id是passWord,“登錄”按鈕的id是submitbutton,那么我們只需要在webBrowser的DocumentCompleted事件中使用下面的代碼即可:

HtmlElementbtnSubmit=webBrowser.Document.All["submitbutton"]; HtmlElementtbUserid=webBrowser.Document.All["username"]; HtmlElementtbPasswd=webBrowser.Document.All["password"];if(tbUserid==null||tbPasswd==null||btnSubmit==null) return;tbUserid.SetAttribute("value","smalldust"); tbPasswd.SetAttribute("value","12345678");btnSubmit.InvokeMember("click");

關(guān)于表單的提交,的確還有另一種方法就是獲取form元素而不是button,并用form元素的submit方法:

HtmlElementformLogin=webBrowser.Document.Forms["loginForm"]; //…… formLogin.InvokeMember("submit");

本文之所以沒有推薦這種方法,是因?yàn)楝F(xiàn)在的網(wǎng)頁,很多都在submit按鈕上添加onclick事件,以對提交的內(nèi)容做最基本的驗(yàn)證。如果直接使用form的submit方法,這些驗(yàn)證代碼就得不到執(zhí)行,有可能會(huì)引起錯(cuò)誤。

實(shí)用方法三:調(diào)用腳本

首先是調(diào)用Web頁面的腳本中已經(jīng)定義好的函數(shù)。假設(shè)HTML中有如下javascript:

functionDoAdd(a,b){ returna+b; }

那么,我們要在WinForm調(diào)用它,只需如下代碼即可:

objectoSum=webBrowser.Document.InvokeScript("DoAdd",newobject[]{1,2}); intsum=Convert.ToInt32(oSum);

其次,如果我們想執(zhí)行一段Web頁面中原本沒有的腳本,該怎么做呢?這次.Net的類沒有提供,看來還要依靠COM了。IHTMLWindow2可以將任意的字符串作為腳本代碼來執(zhí)行。

stringscriptline01=@"functionShowPageInfo(){"; stringscriptline02=@"varnumLinks=document.links.length;"; stringscriptline03=@"varnumForms=document.forms.length;"; stringscriptline04=@"varnumImages=document.images.length;"; stringscriptline05=@"varnumScripts=document.scripts.length;"; stringscriptline06=@"alert('網(wǎng)頁的統(tǒng)計(jì)結(jié)果:/r/n鏈接數(shù):'+numLinks+"; stringscriptline07=@"'/r/n表單數(shù):'+numForms+"; stringscriptline08=@"'/r/n圖像數(shù):'+numImages+"; stringscriptline09=@"'/r/n腳本數(shù):'+numScripts);}"; stringscriptline10=@"ShowPageInfo();";stringstrScript=scriptline01+scriptline02+scriptline03+scriptline04+scriptline05+ scriptline06+scriptline07+scriptline08+scriptline09+scriptline10;IHTMLWindow2win=(IHTMLWindow2)webBrowser.Document.Window.DomWindow; win.execScript(strScript,"Javascript");

以上三種實(shí)用方法轉(zhuǎn)于:http://www.survivalescaperooms.com/smalldust/archive/2006/03/08/345561.html

最后:在腳本中調(diào)用WinForm里的代碼,這個(gè)可能嗎?呵呵,當(dāng)然是可能的。 下面的代碼示例演示如何使用ObjectForScripting屬性。在該示例中,ObjectForScripting屬性被設(shè)置為當(dāng)前窗體。

viewsourceprint?

usingSystem;

usingSystem.Windows.Forms;

usingSystem.Security.Permissions;

[PermissionSet(SecurityAction.Demand,Name="FullTrust")]

[System.Runtime.InteropServices.ComVisibleAttribute(true)]

publicclassForm1:Form

{

privateWebBrowserwebBrowser1=newWebBrowser();

privateButtonbutton1=newButton();

[STAThread]

publicstaticvoidMain()

{

application.EnableVisualStyles();

Application.Run(newForm1());

}

publicForm1()

{

<small id="6yhyf"></small>
    • button1.Text="callscriptcodefr

      發(fā)表評論 共有條評論
      用戶名: 密碼:
      驗(yàn)證碼: 匿名發(fā)表
      主站蜘蛛池模板: 蓬莱市| 梅州市| 兖州市| 抚顺市| 五峰| 安塞县| 鹤山市| 秦安县| 衡东县| 遵化市| 尤溪县| 资源县| 醴陵市| 新化县| 缙云县| 凤台县| 安远县| 青神县| 资兴市| 济南市| 万荣县| 红原县| 嘉兴市| 改则县| 萍乡市| 富裕县| 康平县| 江津市| 威远县| 岢岚县| 金阳县| 柳江县| 苍山县| 徐汇区| 响水县| 丰宁| 射阳县| 克什克腾旗| 香格里拉县| 枣阳市| 江孜县|
      <small id="6yhyf"></small>
        <td id="6yhyf"></td>

      1. <td id="6yhyf"><tr id="6yhyf"></tr></td>