“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:Theel
在这里变成Nothing
:Dim el=wb.Document.GetElementById(“formfieldv1”)
我如何解决这个plz?实际上有一个iframe我没有注意到,多亏Tony在上面的评论中发现了它。谢谢你的回答。
var document = wb.Document;
var element = document.GetElementById("formfieldv1");
element.InnerText = "some value";