リストアイテムの取得について

解決


ぺこ  2005-11-17 02:44:39  No: 127790

先日こちらでお世話になりました。また質問させてください。今回もいろいろ調べて行き詰ってしまい、みなさんのご意見を聞かせて頂きたく投稿ます。リストビューに
Dim cntI AS Integer '読み込んだデータの行数
Dim lstItem AS ListItem

For intI = 0 To cntI
  Set lstItem = ListView1.ListItems.Add(, , ty_Date(intI).Num)
  lstItem.SubItems(1) = ty_Date(intI).Name
  lstItem.SubItems(2) = ty_Date(intI).Age
  lstItem.SubItems(3) = ty_Date(intI).Sexcual
  lstItem.SubItems(4) = ty_Date(intI).Class
Next intI

ty_Date(intI)は構造体

とコードを書いてクラス名簿(表示する内容は番号・名前・年齢・性別・クラス)を表示させます。
このあとデータの削除や追加をして内容が変わってしまったリストビューに表示してあるデータを取得したいのですが

Dim listItemNum() As ListItem
Dim listItemName() As ListItem
Dim listItemAge() As ListItem
Dim listItemSexcual() As ListItem
Dim listItemclass() As ListItem

ReDim Preserve listItemNum(cntI)
ReDim Preserve listItemName(cntI)
ReDim Preserve listItemAge(cntI)
ReDim Preserve listItemSexcual(cntI)
ReDim Preserve listItemclass(cntI)

For intI = 1 To gintcI
            
 Set listItemNum(intI) = lstvieRecord.ListItems(intI)'番号を取得
 Set listItemName(intI) = lstvieRecord.ListItemsItem(intI)'名前を取得
 Set listItemAge(intI) = lstvieRecord.ListItems.Item(intI)'年齢を取得
 Set listItemSexcual(intI) = lstvieRecord.ListItems.Item(intI)'性別を取得
 Set listItemclass(intI) = lstvieRecord.ListItems.Item(intI)'クラスを取得

Next intI
私は各変数にそれぞれデータが入っていると思ったのですが
実際は実行するとすべての配列に最初に取得したlistItemNum(intI) = lstvieRecord.ListItems(intI)と同じ値が入ってしまいます。
私のコードに問題があるのですがどの部分を直してよいのかわかりません。
環境はVB6.0です。ご教授の程よろしくお願いします。


030  2005-11-17 06:25:46  No: 127791

> Set listItemNum(intI) = lstvieRecord.ListItems(intI)'番号を取得
> Set listItemName(intI) = lstvieRecord.ListItemsItem(intI)'名前を取得
> Set listItemAge(intI) = lstvieRecord.ListItems.Item(intI)'年齢を取得
> Set listItemSexcual(intI) = lstvieRecord.ListItems.Item(intI)'性別を取得
> Set listItemclass(intI) = lstvieRecord.ListItems.Item(intI)'クラスを取得

全部同じ値を代入しているんだから全て同じになって当然ですね。

リストビューに値を入れるときは
>For intI = 0 To cntI
>  Set lstItem = ListView1.ListItems.Add(, , ty_Date(intI).Num)
>  lstItem.SubItems(1) = ty_Date(intI).Name
>  lstItem.SubItems(2) = ty_Date(intI).Age
>  lstItem.SubItems(3) = ty_Date(intI).Sexcual
>  lstItem.SubItems(4) = ty_Date(intI).Class
>Next intI
こうしているのに
値をとってくるときはなぜ最初のようになってしまったんでしょう?


030  2005-11-17 06:35:32  No: 127792

よく見ると
>Dim listItemNum() As ListItem
>Dim listItemName() As ListItem
>Dim listItemAge() As ListItem
>Dim listItemSexcual() As ListItem
>Dim listItemclass() As ListItem

>ReDim Preserve listItemNum(cntI)
>ReDim Preserve listItemName(cntI)
>ReDim Preserve listItemAge(cntI)
>ReDim Preserve listItemSexcual(cntI)
>ReDim Preserve listItemclass(cntI)

この辺りが無茶苦茶ですね。
本当に提示のコードはエラー無く動いているんですか?


030  2005-11-17 06:44:06  No: 127793

ついでにデータ取得サンプル

Dim objItem As ListItem

For Each objItem In lstvieRecord.ListItems
            
  Debug.Print objItem.Text          '番号
  Debug.Print objItem.Subitem(1) '名前
  Debug.Print objItem.Subitem(2) '年齢
  Debug.Print objItem.Subitem(3) '性別
  Debug.Print objItem.Subitem(4) 'クラス

Next intI


030  2005-11-17 06:44:58  No: 127794

>Next intI
Nextの間違いでした。失礼


ぺこ  2005-11-17 22:13:58  No: 127795

レス遅くなりました。030さんレスありがとうございました。サンプルコードを元になんとか解決できそうです。ありがとうございました!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加