0

为什么我会得到这个异常?

你调用的对象是空的。

和:

wb.Document.GetElementById("formfieldv1").InnerText = "some value"

wb控件的名称在哪里WebBrowser

这是所有代码:

Private Sub btnSend_Click(sender As System.Object, e As System.EventArgs) Handles btnSend.Click
Dim strFrom As String = txtFrom.Text
Dim strTo As String = txtTo.Text
Dim strMsg As String = txtMsg.Text
wb.Document.GetElementById("formfieldv1").InnerText = strFrom ' strFrom fills fine
End Sub

更新

正如评论中所建议的,我修改了这样的代码:

  Dim doc = wb.Document

  If (doc Is Nothing) Then
     MsgBox("doc is nothing")
  End If


  Dim el = wb.Document.GetElementById("formfieldv1")

  If (el Is Nothing) Then
     MsgBox("el is nothing")
  Else
     el.InnerText = strFrom
  End If

有了这个,我得到了el is nothing。我现在该如何解决?


或者,如果你们可以帮助我解决这个问题,也可以解决我的问题:

如何使用 Web 浏览器控件填写 html 表单

4

1 回答 1

2

我认为这是一个很好的例子,说明为什么将操作分解为多行而不是尝试在一行中执行许多操作是很好的,尤其是当可以返回空值时。

如果你拿wb.Document.GetElementById("formfieldv1").InnerText = "some value"

并将其分解为

var document = wb.Document;
var element = document.GetElementById("formfieldv1");
element.InnerText = "some value";

当抛出异常时,失败的原因会更加明显。单步执行代码时也更容易检查每个操作的结果。从编译的角度来看,它没有任何区别,它最终会被编译成相同的 IL。

我认为在一行代码中做尽可能多的事情往往是一种自然的愿望,但我认为在许多情况下它会损害可读性和调试能力。

于 2012-05-26T17:44:43.037 回答