2010-08-13 13 views
5

Es gibt ein Problem mit WebBrowser späten Bindungsaufrufen, die sich auf die Generierung von Objekt-/Eigenschaftsnamen beziehen.WebBrowser-Issue mit Late Bind-Objekt-/Eigenschaftsnamen

Zum Beispiel:

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

wird mit mehr als einer Instanz des WebBrowser-Steuerelement nicht

tatsächlich geschehen, was ist das mycontrol Objekt werden MyControl und kompiliert vb.net Anwendung fehl mit Fehler

Mitglied nicht gefunden. (Ausnahme von HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND)) bei Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet (Objekt 0, Typ ObjType, String-Name, Objekt [] Args, Zeichenfolge [] Parametername, Boolean [] CopyBack) bei Microsoft .VisualBasic.CompilerServices.NewLateBinding.LateGet (Objektinstanz, Typ Typ, String MemberName, Objekt [] Argumente, String [] ArgumentNames, Typ [] TypeArguments, Boolean [] CopyBack) bei Execute() in C: \ Projects \ WebBrowser \ SampleCall.vb: Zeile 16

Gibt es Lösungen für dieses Problem?

gleiche Code wird mit VB6 app mit mehreren Web-Browser arbeiten steuert

Edit: Dieser Code wird comipled mit: Option Strict Off

Antwort

0

versuchen, den Wert eine andere Art und Weise einstellen:
WebBrowser1.Document.Forms("Myform").children("mycontrol").Value = "test"

2

@ bugtussle

Nächste Zuordnungen funktionieren:

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" 

Das Problem bei diesem Ansatz, der eine Menge Code zu ändern und erneut testen

Wenn Sie einen Blick in Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet Verfahren mit Reflektor-Dienstprogramm erforderlich ist, können Sie das Binding finden. IgnoreCase-Flag wird in Binder.InvokeMember-Aufruf verwendet.

Ich weiß nicht, dass dieser Aufruf über COM erfolgt, und irgendwo gelesen, dass COM-Interop eine Version des Namens in einer Nachschlagetabelle verwendet. Wenn der Parametername ursprünglich in dieser Tabelle als "MyControl" eingegeben wurde, wird diese Version verwendet, nicht "mycontrol". Ich denke deshalb später InvokeMember findet das korrekte Mitglied nicht.