2010-08-13 16 views
5

Existen problemas con el uso de llamadas de vinculación tardía de WebBrowser relacionadas con la generación de nombres de objeto/propiedad.Problema WebBrowser con nombres de objetos/propiedades de Enlace tardío

Por ejemplo:

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

fallará con más de una instancia del control WebBrowser

lo que realmente sucede es que MyControl convertido MyControl objeto y aplicación vb.net compilado fallarán con error

Miembro no encontrado. (Excepción de HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND)) en Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet (Object o, Tipo tipoObj, nombre String, Object [] args, String [] paramnames, Boolean [] CopyBack) en Microsoft .VisualBasic.CompilerServices.NewLateBinding.LateGet (Object Instance, Tipo Tipo, String MemberName, Object [] Arguments, String [] ArgumentNames, Tipo [] TypeArguments, Boolean [] CopyBack) en Execute() en C: \ Proyectos \ WebBrowser \ SampleCall.vb: línea 16

¿Hay alguna solución para este problema?

mismo código funcionará con aplicación VB6 con WebBrowser múltiples controles

Editar: Este código se comipled con: Option Strict Off

Respuesta

0

Pruebe a establecer el valor de una manera diferente:
WebBrowser1.Document.Forms("Myform").children("mycontrol").Value = "test"

2

@ bugtussle

Las próximas asignaciones funcionarán:

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" 

El problema con este enfoque que se requiere para cambiar y volver a probar un montón de código

Si se echa un vistazo al método Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet usando la utilidad del reflector, se puede encontrar que BindingFlags. El indicador IgnoreCase se usa en el enlace. Llamada de InvokeMember.

Debo decir que esta llamada se realiza a través de COM, y estaba leyendo en algún lugar que la interoperabilidad COM está utilizando una versión de nombre en una tabla de búsqueda. Al igual que si el nombre del parámetro se ingresó inicialmente en esa tabla como "MyControl", se usará esta versión, no "mycontrol". Creo que debido a eso más adelante, InvokeMember no encuentra el miembro correcto.

Cuestiones relacionadas