VB2008で,ある特定のウェブページのレイアウトを変更させて表示させる
プログラムを作りました。自分のPCでは快調に動くので,別のPCで動かして
みたところ,NullReferenceExceptionが発生して止まってしまいます。
しらべてみたところ,ビルドしたPCでは,

Dim elemchild as HtmlElement
elemchild=xxxx.firstchild
Do
~処理~
elemchild=elemchild.NextSibling
Loop Until isNothing(elemchild)

で,elemchildがNothingになるとちゃんとループを抜けているのですが,
もう1台のPCでは,elemchildがNothingになってもループを抜けず,
~処理~のところで,NullReferenceExceptionが発生しているみたいです。
Null判定のところを,whileにしてみたり,elemchild is Nothingと書いて
みたり,いろいろ書き換えてみましたが,まったくNothingを拾ってくれず
ループを繰り返します。
~処理~の所全体を,try~catchで囲って,catchでループから抜けさせると
NullReferenceExceptionは起きなくなります。

なぜ,ビルドしたPCではうまくNothingの判定ができ,別なPCでは
Nothingの判定ができないのでしょうか?まったく分かりません。どなたか
お教えください。

A 回答 (1件)

Dim elemchild as HtmlElement


elemchild=xxxx.firstchild ←ここ
Do
~処理~
elemchild=elemchild.NextSibling
Loop Until isNothing(elemchild)

上記の指定箇所ですでにNothingになっている可能性はありませんか?
現在のコードだとDo~Loopの一週目はNothing判定がされません。

この回答への補足

ありがとうございます。しかし,ご指摘の部分がNothingでないことは確認しています。ビルドしたPCではそもそも例外が発生しません。
挙動的にループの終わり間際に例外が発生しているのは分かりましたので,最初は,elemchild=elemchild.NextSiblingがNothingになっているために例外が発生しているのかと思い,この代入文をNull判定してから行うようにしても例外が止まらず,ならば,Loop文の条件判断でNothingのオブジェクトを参照しているからか?と考え,ループの前にif文でNothing判定を行い,Nothingの場合はフラグを立て,Loop文ではそのフラグで条件判断を行うようにしてみました。
それでも例外が発生するので,そのフラグの値をMessageBoxで表示させてみてみると,Nothingで”1”になるべきところが,”0”のまんまだということが分かり,どうやらNull判定ができていないという結論に至りました。
もちろんビルドしたPCでは,ちゃんと”1”になり,ループを抜けます。ビルドしたPCでも,もう1台のPCでも同じデータを使っています。
なぜ,同じデータで,1台のPCではIsNothing()がtrueになり,もう1台のPCでIsNothing()がFalseになるのか,理解できません!

補足日時:2009/05/21 10:34
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング