dポイントプレゼントキャンペーン実施中!

VBを勉強中です。
段階としては書籍やサイトを参考に既存のプログラムを編集しています。

VB6で作られたプログラムのバージョンアップを行う作業で、VB6→VS2005アップグレード完了後、エラー潰し作業(ここでの意見を参考に)後
デバッグを行う際に、下記の例外エラーが発生しました。


"NullReferenceExceptionはハンドルされませんでした。"

mycombo,mylabelが足を引っ張ってるようなのですが
ヒントに従い、宣言の部分で "New"を付したり、値に"nothing"を付しても
解決には至りませんでした。

アドバイスをお願いします。

宣言の部分は下記です。


Friend Class frmFinder_S1
Inherits System.Windows.Forms.Form

Dim mycombo As System.Windows.Forms.ComboBox
Dim mylabel As System.Windows.Forms.Label


コードは下記の通りです。


Private Sub Option2_CheckedChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Option2.CheckedChanged
If eventSender.Checked Then
'座標変換(OFF)
d_zahyou = 2 '1-座標変換ON/OFFを取得
d_Z_X = 0
d_Z_Y = 0
d_Z_Z = 0

For i = 3 To 5
mycombo = CType(Me.Controls("combo" & i), Object) 'コンボボックスの表示の切替
If mycombo.Enabled = True Then
mycombo.Enabled = False
End If
Next i

For j = 5 To 7
mylabel = CType(Me.Controls("label" & j), Object) 'ラベルの表示の切替
If mylabel.Enabled = True Then
mylabel.Enabled = False
End If
Next j

For n = 9 To 11
mylabel = CType(Me.Controls("label" & n), Object) 'ラベルの表示の切替
If mylabel.Enabled = True Then
mylabel.Enabled = False
End If
Next n
End If
End Sub

A 回答 (4件)

ANo.3です。


…分かったような気が。
mycombo = CType(Me.Controls("combo" & i), Object)
を、
mycombo = CType(Me.Frame2.Controls("combo" & i), ComboBox)
に変更してみてください。
(CTypeの第2引数はObjectでも通るかもしれませんが、せっかくなので
ComboBoxか、それが嫌ならせめてControlとかに変えておきましょう)
要は、Combo3~5は、該当のFormに「直接は」属していなかったって事ですね。
    • good
    • 0
この回答へのお礼

通りました!
インステンス?とMeに原因があるのでは、と
色々と調べていたのですが見当違いでしたね。

ありがとうございました。
直後から早速別問題が発生しましたが
調べて進めていきます!

お礼日時:2008/06/19 17:49

えーと、念のために根本的な部分の確認なんですが、


combo3~combo5は、デザイナで見て存在する状態ですか?
もしくはコード内でコントロールを生成している場合は、
Me.Controls.Add されていますか?
(確かAddされてなかったら表示すら されなかったとは思いますが…)

この回答への補足

見ていただいてありがとうございます。

combo→Comboと全てを統一しました。

デザイナではFrame2内にCombo3~Combo5は存在します。

designer.vb内に下記のものがありました。

Me.Frame2.Controls.Add(Combo5)
Me.Frame2.Controls.Add(Combo4)
Me.Frame2.Controls.Add(Combo3)

回答になっていますでしょうか?よろしくお願いします。

補足日時:2008/06/19 12:54
    • good
    • 0

オブジェクトの命名は小文字なっているのでしょうか


Combo1,Combo2 となっている物を combo1,combo2などで探しても見つからないと思いますよ

この回答への補足

アドバイスありがとうございます。
小文字で名前をつけております。

補足日時:2008/06/19 08:58
    • good
    • 0

mycombo = CType(Me.Controls("combo" & i), Object)



mycombo = CType(Me.Controls("combo" & i), ComboBox)

mylabel = CType(Me.Controls("label" & j), Object)

mylabel = CType(Me.Controls("label" & j), Label)

mylabel = CType(Me.Controls("label" & n), Object)

mylabel = CType(Me.Controls("label" & n), Label)
にそれぞれ変更してください。

この回答への補足

それぞれ該当箇所を変更しましたが結果は同じでした。

If mycombo.Enabled = True Then

↑がハイライトされ、
"NullReferenceExceptionはハンドルされませんでした。"
"オブジェクト参照がオブジェクト インスタンスに設定されていません。"
と表示されます。


[詳細の表示]→[data]タグ→[item]の項目に以下のコメントが記されてました。

インデックス付きのプロパティを評価するためには、プロパティが限定されていて、ユーザーにより引数が明示的に指定されていなければなりません。

補足日時:2008/06/18 17:33
    • good
    • 0

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