2010-08-13 54 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未能找到正确的成员。