程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#之WinForm WebBrowser適用技能匯總

C#之WinForm WebBrowser適用技能匯總

編輯:C#入門知識

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved