VB6.0のアプリにて、エラー番号 35605のエラー「このアイテムのコントロールは削除されています」が発生、Webでとりあえずエラー番号を検索してみましたが、海外サイトにいくつか情報があるくらいであまり該当しそうなケースが無い。
仕方ないのでどうやったら発生するかを見てみました。エラーが出ている箇所はどうやらListViewへのデータ設定部分のようだったので、ListViewで再現を試してみたところ、下記のようなコードで現象が出ました。
Dim colHeader As ColumnHeader Dim eachItem As ListItem With Me.listViewData .BorderStyle = ccFixedSingle .View = lvwReport '表示形式を詳細レポートに Set colHeader = .ColumnHeaders.Add(, , "", 0) Set colHeader = .ColumnHeaders.Add(, , "番号", 800, lvwColumnRight) Set colHeader = .ColumnHeaders.Add(, , "案件名", 3050, lvwColumnCenter) End With '実ソースをまねたListViewへのデータ設定処理(1行、サブアイテム2個だけ) Set eachItem = Me.listViewData.ListItems.Add(, , "") 'サブアイテムに値を設定 eachItem.SubItems(1) = "00001" eachItem.SubItems(2) = "ABCDEFG" 'eachItemがListItemを参照したまま、ListItemをクリア(要するに、参照されてるのに '参照先を消してしまう) listViewData.ListItems.Clear '消えているデータを、eachItem経由で参照しようとする '(ここでエラーが起きる) eachItem.Selected = True
実際の処理をまねたサンプルなので、何やってんだ?的な処理があるのはご容赦を。
普通に存在しないListItemを参照すると、インデックスが有効範囲にありません、的なエラーになります。しかし、ListItemを参照するオブジェクトを用意し、参照先だけを消した状態(要するに参照しているが先に実体が無い)にして改めてListItemを取り扱おうとするとこのエラーが発生するようです。
問題は…そういうケースに一致しそうなパターンが無いんですよね。やたらとDoEventsが入っているプログラムなので、処置途中でボタンなどが追っかけで押されて多重処理(参照中にListView自体がクリアされてしまう、など)かとも思ったのですが、ちょっとそういうケースもオペレーション的になさそうで……行き詰まってます。