“VB.NET投掷”;对象引用未设置为对象的实例;例外情况

“VB.NET投掷”;对象引用未设置为对象的实例;例外情况,.net,vb.net,exception,.net,Vb.net,Exception,为什么我会得到这个例外 对象引用未设置为对象的实例 与: 其中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 = tx

为什么我会得到这个例外

对象引用未设置为对象的实例

与:

其中
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什么都不是
。我现在如何解决这个问题


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


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

如果您使用wb.Document.GetElementById(“formfieldv1”).InnerText=“some value”

把它分解成

var document = wb.Document;
var element = document.GetElementById("formfieldv1");
element.InnerText = "some value";
当抛出异常时,失败的地方会更加明显。在单步执行代码时,检查每个操作的结果也更容易。从编译的角度来看,它不会有什么区别,它最终会被编译成相同的IL


我认为人们自然希望在一行代码中尽可能多地执行操作,但我认为在许多情况下,这会损害可读性和调试能力。

要么
wb
,要么
文档
,或者文档中不存在
formfieldv1
元素。请按步骤将其分解。
Document
GetElementById()
的结果为空。@Oded:wb被放到表单中,我可以在键入时看到它的成员。另外,
formfieldv1
也在这里,正如在freesmscraze.com中可以看到的那样,正如@Henk建议的那样,您应该分解该行的每个部分-将
wb.Document
分配给一个变量。然后在该变量上调用
GetElementById
,将结果分配给一个元素,然后在此变量上设置
InnerText
。其中一个是
Nothing
@Oded:The
el
在这里变成
Nothing
Dim el=wb.Document.GetElementById(“formfieldv1”)
我如何解决这个plz?实际上有一个iframe我没有注意到,多亏Tony在上面的评论中发现了它。谢谢你的回答。
var document = wb.Document;
var element = document.GetElementById("formfieldv1");
element.InnerText = "some value";