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

これは、特にnull値を返すことができる場合に、1行で多くの操作を実行しようとするのではなく、操作を複数行に分割するのが良い理由の良い例だと思います。

あなたが取る場合wb.Document.GetElementById("formfieldv1").InnerText = "some value"

に分解します

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

例外がスローされると、何が失敗しているかがはるかに明確になります。また、コードをステップ実行するときに、各操作の結果を確認する方が簡単です。コンパイルの観点からは、違いはなく、最終的には同じILにコンパイルされます。

1行のコードでできる限りのことをしたいというのは当然のことだと思いますが、多くの場合、可読性とデバッグ性が損なわれると思います。

于 2012-05-26T17:44:43.037 に答える