2010-08-13 13 views
5

Ci sono problemi con l'uso di chiamate di binding late di WebBrowser relative alla generazione di nomi di oggetti/proprietà.Problema WebBrowser con nomi oggetto/proprietà Late Bind

Ad esempio:

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

sarà sicuro con più di un'istanza del controllo WebBrowser

quello effettivamente accadere è che mycontrol oggetto diventare MyControl e applicazione vb.net compilata fallirà con errore

Utente non trovato. (Eccezione da HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND)) in Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet (Object o, Type objType, Nome stringa, Object [] args, String [] paramnames, Boolean [] CopyBack) in Microsoft .VisualBasic.CompilerServices.NewLateBinding.LateGet (Object Instance, Tipo Type, String MemberName, Object [] Arguments, String [] ArgumentNames, Digitare [] TypeArguments, Boolean [] CopyBack) in Execute() in C: \ Projects \ WebBrowser \ SampleCall.vb: riga 16

Esistono soluzioni per questo problema?

Stesso codice lavorerà con VB6 app con browser web più controlli

Edit: Questo codice è comipled con: Option Strict Off

risposta

0

Provare a impostare il valore di un modo diverso:
WebBrowser1.Document.Forms("Myform").children("mycontrol").Value = "test"

2

@ bugtussle

assegnazioni Successivo funzionerà:

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" 

Il problema di questo approccio che è necessario per modificare e ripetere il test un sacco di codice

Se si dà un'occhiata in metodo di Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet utilizzando utility riflettore, si può trovare che BindingFlags. Il flag IgnoreCase viene utilizzato nella chiamata binder.InvokeMember.

Non so se questa chiamata viene eseguita tramite COM e stava leggendo da qualche parte che l'interoperabilità COM utilizza una versione del nome in una tabella di ricerca. Come se il nome del parametro fosse inizialmente inserito in quella tabella come "MyControl" di quanto verrà usata questa versione, non "mycontrol". Penso che in seguito InvokeMember non riesca a trovare un membro corretto.