- - PR -
VB6 から変換したリストビューに不具合
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 | ||||
|
投稿日時: 2003-11-07 10:03
Callを消すとどうなるでしょうか?
| ||||
|
投稿日時: 2003-11-07 13:16
試してみましたが変わりませんでした。 | ||||
|
投稿日時: 2003-11-07 15:05
例外は本当にClear()の行で発生しているのでしょうか?
デバッグモードで発生行を確認したということであれば、 そのときのエラーメッセージの内容はどのようになっているのでしょう? | ||||
|
投稿日時: 2003-11-07 15:22
エラーの発生個所はClear()です。 当事象は別の端末でVB6のソースを変換してデバッグしても同じ結果になりました。 エラーは以下のメッセージです。 'System.NullReferenceException' のハンドルされていない例外が Project1.exe で発生しました。 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 | ||||
|
投稿日時: 2003-11-07 15:50
VB6のListViewには,過去にアイテム追加でアプリケーションエラーとなるバグがあったようですが,SP4で修正されているようです。
http://support.microsoft.com/default.aspx?scid=kb;ja;257524&Product=vbJPN SP4以降を適用してますでしょうか? | ||||
|
投稿日時: 2003-11-07 16:22
例外が発生したときに「継続」ボタンではなく、「中断」ボタンをクリックします。例外が発生した箇所で、実行が止まります。
その状態で、 ListView1 ↑このへん ListView1.ListItems ↑このへん にマウスカーソルをあてると、現在の値がヒント表示されますが、どちらがnothingでしょうか。 どちらもnothingでないなら、clearメソッド内部で発生していますから、該当するListViewを外し、置き直すしかないと思います。 #自動を信用するべきではない、と思う | ||||
|
投稿日時: 2003-11-07 16:41
VB6はSP5でのソースでした。
ListView1とListView1.ListItemsは共にNothingではありませんでした。 ということでClear()内部で発生しているということになりますね。 こんな簡単なロジックで発生するなんて、悲しいですね。 自動変換をあまり信用していないですけど、これじゃ.......... |
1