2012-10-21 34 views
0

submitting a form inside a WebBrowser control的每個代碼示例到目前爲止,我看到硬編碼WebBrowser.Document.Forms[0].InvokeMember()參數爲"submit"WebBrowser.Document.Forms [0] .InvokeMember()參數總是「提交」嗎?

此參數必須始終爲「提交」

如果是這樣,那麼爲什麼它是一個參數?

如果不是,指定要放置哪個字符串的規則是什麼?它依賴於正在訪問的頁面的HTML嗎?

更新1:documentation for InvokeMember()清楚地顯示了使用「submit」以外的值的示例。所以,至少我得到了答案:沒有

但是我仍然不明白什麼時候應該使用「submit」,什麼時候應該使用「moveRow」:在我通過「submit」處理的網頁中沒有提到該字符串,但它完美地起作用。隱含「提交」隱藏在網頁的位置在哪裏?

更新2:啊!我想我已經開始明白了:這是一個Javascript built-in method。因此暗示了任何DOM Form元素。

一個權威的答案是非常感謝。

回答

1

不,它不一定是「提交」。但這絕對是你使用表單時最常用的方法。 Winforms HtmlDocument和HtmlElement類是DOM接口的包裝器。本例中的核心部分是IHtmlDocument2(匹配HtmlDocument)和IHtmlElement2(匹配HtmlElement)。用一組特定的接口類型,如IHtmlFormElement來表示DOM中的表單對象。但是Winforms中沒有匹配的類,HtmlElement將它們全部包裝起來。這就是爲什麼你需要使用InvokeMember(),和反射的Type.InvokeMember()一樣。它彌補了不包含在HtmlElement中的方法。像IHtmlFormElement :: submit()一樣。

HtmlElement的一個優勢是它可以幫助您避免這些DOM接口版本的困擾。例如有IHtmlDocument的七個版本。每當微軟改進IE瀏覽器時,他們都傾向於在添加額外成員的情況下創建另一個接口版本。

你當然可以早期使用它們。添加對c:\ windows \ system32 \ mshtml.tlb的引用。將WebBrowser.ActiveXInstance投射到mshtml.IHtmlDocument以使用它。

+0

這是一個非常教育和有益的答案。謝謝。 – ih8ie8

0

InvokeMember通過IDispatch :: Invoke調用表單元素的方法/屬性。您可以從IE的文檔of the form element中找到您可以調用的方法和屬性列表。

通過IE的類型庫更容易綁定確保類型安全,但您需要爲方法/屬性找到正確的接口,這意味着對於表單元素,如果在IHTMLFormElementX下找不到方法/屬性,則需要查看IHTMLElementX 。