2010-08-13 53 views
5

使用WebBrowser與對象/屬性名稱生成相關的延遲綁定調用存在問題。帶有延遲綁定對象/屬性名稱的WebBrowser問題

例如:

WebBrowser1.Document.DomDocument.Forms.Myform.mycontrol.Value = "test" 

將失敗,WebBrowser控件的多個實例

什麼是真正發生的是,mycontrol對象成爲Mycontrol和編譯vb.net應用程序將失敗有錯誤

找不到會員。 (在HRESULT異常:0x80020003(DISP_E_MEMBERNOTFOUND)) at Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet(Object o,Type objType, String name,Object [] args,String [] paramnames,Boolean [] CopyBack) at Microsoft .VisualBasic.CompilerServices.NewLateBinding.LateGet(對象實例, 類型類型,字符串MemberName,對象[]參數,字符串[]參數名稱, 類型[] TypeArguments,Boolean [] CopyBack) at Execute()in C:\ Projects \ WebBrowser \ SampleCall.vb:line 16

是否有解決此問題的方法?

相同的代碼將與多個web瀏覽器VB6應用程序運行控制

編輯:此代碼comipled有:Option Strict Off選項

回答

0

嘗試設置的值不同的方式:
WebBrowser1.Document.Forms("Myform").children("mycontrol").Value = "test"

2

@ bugtussle

接下來的作業將起作用:

WebBrowser1.Document.Forms("Myform").Children("mycontrol").InnerText = "test" 
WebBrowser1.Document.DomDocument.Forms("Myform").all("mycontrol").Value = "test" 
WebBrowser1.Document.DomDocument.Forms.Myform.all.mycontrol.Value = "test" 

這種做法,需要改變和重新測試了大量的代碼

如果您在使用反射工具來看看到Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet方法的問題,你可以找到的BindingFlags。 IgnoreCase標誌用於binder.InvokeMember調用。

我不確定這個調用是通過COM來完成的,並且正在讀取COM互操作在查找表中使用一個名稱版本的地方。就像如果參數名稱最初是以「MyControl」的形式輸入到該表格中的,則將使用該版本,而不是「mycontrol」。我認爲因爲後來InvokeMember未能找到正確的成員。