2009-11-05 122 views
2

有沒有方法可以取消選中/選中Web瀏覽器控件中加載的網頁中的複選框?謝謝。通過WebBrowser控件取消選中網頁中的複選框

更新:(這是我原來沒有運氣試過)

HtmlDocument rememberme = this.webBrowser1.Document; 
rememberme.GetElementById("remBox").SetAttribute("checked", "false"); 
+1

簡短回答是「是」。 – CodeRedick 2009-11-05 14:02:45

+0

CHECKED屬性實際上不是布爾型,而是存在或不存在,這可能是爲什麼SetAttribute(「checked」,「false」)失敗。您可能可以完全刪除該屬性。 – Myles 2009-11-05 15:58:55

+0

你可以將它設置爲null,它應該工作:ele.SetAttribute(「checked」,null); – 2012-08-22 05:40:38

回答

5

您可以使用:

webBrowser.Document.InvokeScript

見:

InvokeScript

這樣,您就可以調用JS功能,將你想要的頁面內容。

另一種方法是使用MSHTML API,像這樣: ((HTMLInputElement)this.webBrowser1.Document.GetElementById("test").DomElement)[email protected] = false;

+0

什麼是正確的方式來使用JavaScript取消選中一個複選框? – user 2009-11-05 14:25:11

+0

這取決於 - 如果你知道複選框的ID,那麼只需使用 'document.getElementById('yourid').checked = false;' 但是,如果它是動態的(比如在控制中的ASP.NET中)比你不得不使用另一種方式 - 按類名稱查找它,遍歷DOM樹或其他東西。 – Majkel 2009-11-05 14:40:13

0

在javascript中,你應該可以使用ClientID的設置.checked =假。

+1

這與網頁瀏覽器控件有什麼關係? – CodeRedick 2009-11-05 14:05:27

0

http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.invokescript.aspx 你需要分析頁面結構,找出如何定位的複選框,並使用邁爾斯的方法來檢查/取消JavaScript中的複選框。

+0

這一切看起來都很複雜...... – CodeRedick 2009-11-05 14:08:05

+0

如果你跳過.Net的包裝類並直接調用IE API,會更加複雜。 – 2009-11-05 14:15:09

+0

我的觀點是,一旦你在webbrowser控件中獲得了文檔,就可以直接操作dom對象,而不需要使用javascript。 – CodeRedick 2009-11-05 14:34:20

0

LONG版本是您必須使用DOM函數來查找要更新的控件的客戶端ID,然後設置它的值。

我也許可以找到適合你一些示例代碼,一旦我得到工作,如果沒人打我吧...

編輯:

基本上所有你需要做的是:

HTMLDocumentClass doc = webBrowserControl.Document as mshtml.HTMLDocumentClass; 

HTMLInputElement input = doc.all.item("checkboxID", 0) as HTMLInputElement; 

input.value ="false"; //Could be 0, not sure... 
//could also be [email protected] = false, sorry I haven't actually used this on a checkbox before... one of these should work though 

所以是的,不確定爲什麼有人會通過所有的努力寫一個JavaScript,並調用它,當你可以用3行代碼設置控件的值。

+0

它應該是'input。@ checked = false;'。 使用JS你不必引用mshtml,你可以在一行中做到這一點 - 'this.webBrowser1.Document.InvokeScript(「取消」);'。 – Majkel 2009-11-05 15:41:31

+0

好吧,C#中的一行+ JS中的一行。 – Majkel 2009-11-05 15:42:32

+0

嗯,如果我真的想,我可以把它壓縮成一行C#。 ;)我懷疑實際上將腳本添加到頁面並使用它將最終變得更多。 – CodeRedick 2009-11-05 16:02:28

1

您可以使用HTML元素的InvokeMember方法來調用DOM事件。在我們的例子中「點擊」。如果你有一個WebBrowser控件而不是你所要做的就是找到這個元素並調用這個方法。

For Each ele As HtmlElement In Me.WebBrowser1.Document.All 
     If ele.Name = "accept" Then 
      ele.InvokeMember("click") 
     End If 
Next 

在我的示例中,'accept'是複選框元素的名稱。您可以將SetAttribute()用於某些其他控件,但模擬點擊的最佳方法是使用GetAttribute()查找複選框的狀態,如果該複選框設置爲false,則單擊。希望能幫助到你。