先日こちらでお世話になりました。また質問させてください。今回もいろいろ調べて行き詰ってしまい、みなさんのご意見を聞かせて頂きたく投稿ます。リストビューに
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です。ご教授の程よろしくお願いします。
> 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
こうしているのに
値をとってくるときはなぜ最初のようになってしまったんでしょう?
よく見ると
>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)
この辺りが無茶苦茶ですね。
本当に提示のコードはエラー無く動いているんですか?
ついでにデータ取得サンプル
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
>Next intI
Nextの間違いでした。失礼
レス遅くなりました。030さんレスありがとうございました。サンプルコードを元になんとか解決できそうです。ありがとうございました!
ツイート | ![]() |