gpt4 book ai didi

vb.net - 延迟绑定(bind)对象/属性名称的 Web 浏览器问题

转载 作者:行者123 更新时间:2023-12-02 06:33:48 24 4
gpt4 key购买 nike

使用与对象/属性名称生成相关的 WebBrowser 后期绑定(bind)调用存在问题。

例如:

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

如果 WebBrowser 控件有多个实例,将会失败

实际发生的情况是 mycontrol 对象变成 Mycontrol 并且编译的 vb.net 应用程序将失败并出现错误

Member not found. (Exception from 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(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack) at Execute() in C:\Projects\WebBrowser\SampleCall.vb:line 16

这个问题有解决办法吗?

相同的代码适用于具有多个 WebBrowser 控件的 vb6 应用程序

编辑:此代码编译时使用:Option Strict Off

最佳答案

@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 无法找到正确的成员。

关于vb.net - 延迟绑定(bind)对象/属性名称的 Web 浏览器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3474740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com