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#法式設計有必定的自創價值。