- PR -

VB6 から変換したリストビューに不具合

1
投稿者投稿内容
taro
会議室デビュー日: 2003/11/06
投稿数: 7
投稿日時: 2003-11-06 21:22
お世話になります。yahagiと申します。

VB6で作成したソースを.NETへ「Visual Basic アップグレードウィザード」
を使用してして変換し検証を行っております。
今回、問題となった部分はリストビューに関連するところで、
Itemを連続して追加した後に続けてclearをするとエラーが発生します。

'System.NullReferenceException' のハンドルされていない例外が Project1.exe で発生しました。
追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。

追加する件数を20回にしてますが、数を減らせばエラーになりません。
.NET標準のリストビューを使用すれば問題無いのは分かっているのですが、
リストビューを多用したシステムですので時間的に難しい状態です。

回避方法はありますでしょうか?宜しくお願い致します。

環境:
Windows 2000 Professional SP4
Microsoft Visual Studio .NET2002
Microsoft .NET Framework v1.0


以下にソースを書きます。

[VB6]
Private Sub Command1_Click()
Dim j As Integer

For j = 1 To 20
Call ListView1.ListItems.Add(, , "data1")
Next
Call ListView1.ListItems.Clear

End Sub

[VB.NET]
Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
Dim j As Short

For j = 1 To 20
Call ListView1.ListItems.Add( , , "data1")
Next
Call ListView1.ListItems.Clear()

End Sub
KeroKero
常連さん
会議室デビュー日: 2003/11/06
投稿数: 26
投稿日時: 2003-11-07 10:03
Callを消すとどうなるでしょうか?
taro
会議室デビュー日: 2003/11/06
投稿数: 7
投稿日時: 2003-11-07 13:16
引用:

KeroKeroさんの書き込み (2003-11-07 10:03) より:
Callを消すとどうなるでしょうか?



試してみましたが変わりませんでした。
Tohru
会議室デビュー日: 2002/12/19
投稿数: 19
投稿日時: 2003-11-07 15:05
例外は本当にClear()の行で発生しているのでしょうか?

デバッグモードで発生行を確認したということであれば、
そのときのエラーメッセージの内容はどのようになっているのでしょう?
taro
会議室デビュー日: 2003/11/06
投稿数: 7
投稿日時: 2003-11-07 15:22
引用:

Tohruさんの書き込み (2003-11-07 15:05) より:
例外は本当にClear()の行で発生しているのでしょうか?

デバッグモードで発生行を確認したということであれば、
そのときのエラーメッセージの内容はどのようになっているのでしょう?




エラーの発生個所はClear()です。
当事象は別の端末でVB6のソースを変換してデバッグしても同じ結果になりました。
エラーは以下のメッセージです。

'System.NullReferenceException' のハンドルされていない例外が Project1.exe で発生しました。
追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
KeroKero
常連さん
会議室デビュー日: 2003/11/06
投稿数: 26
投稿日時: 2003-11-07 15:50
VB6のListViewには,過去にアイテム追加でアプリケーションエラーとなるバグがあったようですが,SP4で修正されているようです。
http://support.microsoft.com/default.aspx?scid=kb;ja;257524&Product=vbJPN

SP4以降を適用してますでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-07 16:22
例外が発生したときに「継続」ボタンではなく、「中断」ボタンをクリックします。例外が発生した箇所で、実行が止まります。
その状態で、
ListView1
 ↑このへん

ListView1.ListItems
      ↑このへん

にマウスカーソルをあてると、現在の値がヒント表示されますが、どちらがnothingでしょうか。

どちらもnothingでないなら、clearメソッド内部で発生していますから、該当するListViewを外し、置き直すしかないと思います。

#自動を信用するべきではない、と思う
taro
会議室デビュー日: 2003/11/06
投稿数: 7
投稿日時: 2003-11-07 16:41
VB6はSP5でのソースでした。

ListView1とListView1.ListItemsは共にNothingではありませんでした。
ということでClear()内部で発生しているということになりますね。
こんな簡単なロジックで発生するなんて、悲しいですね。
自動変換をあまり信用していないですけど、これじゃ..........
1

スキルアップ/キャリアアップ(JOB@IT)