C#之WinForm WebBrowser適用技能匯總。本站提示廣大學習愛好者:(C#之WinForm WebBrowser適用技能匯總)文章只能為提供參考,不一定能成為您想要的結果。以下是C#之WinForm WebBrowser適用技能匯總正文
本文實例匯總了C#中WinForm WebBrowser罕見的適用技能,關於C#法式開辟來講有不錯的自創價值。分離論述以下:
辦法1:獲得狀況欄信息
void webBrowser1_StatusTextChanged(object sender, EventArgs e) { label1.Text = webBrowser1.StatusText; }
辦法2:頁面跳轉後轉變地址欄地址
//在Navigated事宜處置函數中轉變地址欄地址是最適當的: private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { textBox1.Text = webBrowser1.Url.ToString(); }
辦法3:設置單選框
//建議應用履行單擊事宜的方法來設置單選框,而不是修正屬性: webBrowser1.Document.GetElementById("RBT_A").InvokeMember("click");
辦法4:設置聯動型下拉列表
//比擬罕見的聯動型多級下拉列表就是省/市縣選擇了,這類情形下直接設置選擇項的屬性不會觸發聯動,須要在最初履行觸發事宜函數能力正常任務: foreach (HtmlElement f in s.GetElementsByTagName("option")) { if (f.InnerText == "北京") { f.SetAttribute("selected", "selected"); } else { f.SetAttribute("selected", ""); } } s.RaiseEvent("onchange");
辦法5:在WinForm中呼應Web事宜
假定HTML源代碼以下:
<html> <body> <input type="button" id="btnClose" value="封閉" /> </body> </html>
HtmlDocument htmlDoc = webBrowser.Document; HtmlElement btnElement = htmlDoc.All["btnClose"]; if (btnElement != null) { btnElement.click += new HtmlElementEventHandler(HtmlBtnClose_Click); }
很簡略吧?那末稍稍高等一點的——我們都曉得一個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));
辦法6:模仿表單主動填寫和提交
假定有一個最簡略的登錄頁面,輸出用戶名暗碼,點“登錄”按鈕便可登錄。已知用戶名輸出框的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");
關於表單的提交,切實其實還有另外一種辦法就是獲得form元素而不是button,並用form元素的submit辦法:
HtmlElement formLogin = webBrowser.Document.Forms["loginForm"]; //…… formLogin.InvokeMember("submit");
本文之所以沒有推舉這類辦法,是由於如今的網頁,許多都在submit按鈕上添加onclick事宜,以對提交的內容做最根本的驗證。假如直接應用form的submit辦法,這些驗證代碼就得不到履行,有能夠會惹起毛病。
辦法7:挪用劇本
起首是挪用Web頁面的劇本中曾經界說好的函數。假定HTML中有以下Javascript:
function DoAdd(a, b) { return a + b; }
那末,我們要在WinForm挪用它,只需以下代碼便可:
object oSum = webBrowser.Document.InvokeScript("DoAdd", new object[] { 1, 2 }); int sum = Convert.ToInt32(oSum);
其次,假如我們想履行一段Web頁面華夏本沒有的劇本,該怎樣做呢?此次.Net的類沒有供給,看來還要依附COM了。IHTMLWindow2可以將隨意率性的字符串作為劇本代碼來履行。
string scriptline01 = @"function ShowPageInfo() {"; string scriptline02 = @" var numLinks = document.links.length; "; string scriptline03 = @" var numForms = document.forms.length; "; string scriptline04 = @" var numImages = document.images.length; "; string scriptline05 = @" var numScripts = document.scripts.length; "; string scriptline06 = @" alert('網頁的統計成果:\r\n鏈接數:' + numLinks + "; string scriptline07 = @" '\r\n表雙數:' + numForms + "; string scriptline08 = @" '\r\n圖象數:' + numImages + "; string scriptline09 = @" '\r\n劇本數:' + numScripts);}"; string scriptline10 = @"ShowPageInfo();"; string strScript = scriptline01 + scriptline02 + scriptline03 + scriptline04 + scriptline05 + scriptline06 + scriptline07 + scriptline08 + scriptline09 + scriptline10; IHTMLWindow2 win = (IHTMLWindow2)webBrowser.Document.Window.DomWindow; win.execScript(strScript, "Javascript");
最初:在劇本中挪用WinForm裡的代碼,這個能夠嗎? 呵呵,固然是能夠的。
上面的代碼示例演示若何應用 ObjectForScripting 屬性。在該示例中,ObjectForScripting 屬性被設置為以後窗體。
using System; using System.Windows.Forms; using System.Security.Permissions; [PermissionSet(SecurityAction.Demand, Name="FullTrust")] [System.Runtime.InteropServices.ComVisibleAttribute(true)] public class Form1 : Form { private WebBrowser webBrowser1 = new WebBrowser(); private Button button1 = new Button(); [STAThread] public static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } public Form1() { button1.Text = "call script code from client code"; button1.Dock = DockStyle.Top; button1.Click += new EventHandler(button1_Click); webBrowser1.Dock = DockStyle.Fill; Controls.Add(webBrowser1); Controls.Add(button1); Load += new EventHandler(Form1_Load); } private void Form1_Load(object sender, EventArgs e) { webBrowser1.AllowWebBrowserDrop = false; webBrowser1.IsWebBrowserContextMenuEnabled = false; webBrowser1.WebBrowserShortcutsEnabled = false; webBrowser1.ObjectForScripting = this; // Uncomment the following line when you are finished debugging. //webBrowser1.ScriptErrorsSuppressed = true; webBrowser1.DocumentText = "<html><head><script>" + "function test(message) { alert(message); }" + "</script></head><body><button " + "onclick=\"window.external.Test('called from script code')\">" + "call client code from script code</button>" + "</body></html>"; } public void Test(String message) { MessageBox.Show(message, "client code"); } private void button1_Click(object sender, EventArgs e) { webBrowser1.Document.InvokeScript("test", new String[] { "called from client code" }); } } //該代碼實例源於:MSDN
信任本文所述實例對年夜家的C#法式設計有必定的自創價值。