【问题标题】:Optiion Strict and Late binding VB选项严格和后期绑定 VB
【发布时间】:2018-04-06 18:49:03
【问题描述】:

对不起,伙计们,我 CTRL-A 我原来的帖子.. 当然。

这只是简单地询问我在使用 Option Strict On 时遇到的后期绑定错误,这在发布控制台应用程序期间也造成了非常奇怪的不利影响。执行以下操作,感谢非常有用的答案解决了我的问题。

我想说的是,在更好地掌握了后期绑定和早期绑定之后,我可以理解人们为什么要尽早尝试,它附带了很多非常酷且有用的工具,而且它似乎也确实有助于避免那些崩溃问题。

Dim ie As InternetExplorer 将文档变暗为 HTMLDocument 将元素作为 HTMLInputElement ie = 新的 InternetExplorer

    ie.Visible = True
    ie.Navigate("www.google.com")
    While ie.ReadyState <> 4
    End While

    document = CType(ie.Document, HTMLDocument)

    ele = CType(document.getElementById("lst-ib"), HTMLInputElement)

    ele.value = "test"

我希望这可以帮助别人,因为它帮助了我。您可以看到我们在示例中使用了早期绑定 :)

【问题讨论】:

  • 您实际上想用浏览器做什么? WebBrowser Control 可能是您所需要的。
  • 添加到@Andrew Morton 所说的,webbrowser 控件就是您所需要的,它有一个Document 属性,其类型为HtmlDocument。然后该类型有一个名为GetElementById 的方法,它返回一个HtmlElement。现在你的代码都不起作用......另外,你使用的是旧的 vb6 剩菜,这不是 vb......
  • 嗯..所以代码似乎工作正常,并且一直如此。直到今天,多个已发布的控制台应用程序似乎都运行良好。例如,您在上面看到的内容当前获取元素的 ID,然后单击它。到目前为止,在所有 IE 浏览器自动化中都可以正常工作,您能否举例说明如何执行类似任务? :)
  • 使用 Visual Studio 的 对象浏览器(查看菜单->对象浏览器)来发现哪个接口定义了 Document 属性。在对象浏览器中,展开 InternetExploreClass 节点,然后展开“Base Types”节点。点击各个界面,直到找到Document。它在IWebBrowser2 Interface 上定义。 getElementById Method 在 IHTMLDocument3 上定义。
  • @TnTinMn 现在这很酷,不知道这一切是多么容易访问:)。所以似乎说文档是类型对象。我的导航与您描述的略有不同。 IEClass - 然后我可以看到旁边有一个小扳手的文档。但是,我可以说这将非常有帮助。谢谢!

标签: vb.net internet-explorer binding automation


【解决方案1】:

后期绑定基本上是访问编译器在编译时无法确认存在的对象的成员。据我所知,那里的问题是InternetExplorer.Document 属性是Object 类型,而Object 类型没有getElementById 方法。该属性在运行时引用的对象很可能具有该方法,但如果编译器在编译时无法确认,则这是后期绑定。

您需要做的是将InternetExplorer.Document 转换为运行时的实际类型,以便编译器在编译时知道存在getElementById 方法。请注意,对象本身实际上实现了许多不同的接口,因此您需要将其转换为具有您要访问的成员的接口。

【讨论】:

  • 嘿,谢谢!你能不能用这种方式举一个简单的例子。我一直认为: Dim objBrowser As InternetExplorer objBrowser = New SHDocVw.InternetExplorer 是一个显式类型。
  • 你说得对,这是一个显式类型。这与问题的关系完全为零。你没有在听我在说什么。这不是objBrowser 的问题。您已成功获取该对象的 Document 属性。问题是该属性的结果。它返回一个Object 引用,而您正尝试调用getElementById。这就是问题所在。这就是你需要投射的东西。你觉得Document是什么类型的?
  • 感谢您的指导!我实际上不确定什么类型的文档是我想的某种 htmldocument,但现在你要我去找出:)。当我弄清楚这一点时,我会发表评论,听起来你的答案是正确的。谢谢
  • 好的,所以我到了某个地方。例如,如果我说将暗淡的文档写为 HTMLDOCUMENT,我会在输入文档时注意到“。” VS 接管并离开您是否尝试使用其中任何一个,它为我提供了一些可供选择的选项。我仍然缺少的是“cast InternetExplorer.Document”,
  • 我猜我真正要问的是什么,如果这是不好的术语,如果我试图说好的,请原谅我 buttonElem = document.getElementById("someElementId") buttonElem 什么都不是,因为我认为没有提及那个 IE 的任何地方,如果我添加 IE,正如你所说,我在 Option strict 上得到那个错误,因为 ie.document 实际上带来了一个返回对象 ref。
猜你喜欢
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-26
  • 1970-01-01
相关资源
最近更新 更多