• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:リスト間のアイテム移動について)

リスト間のアイテム移動について

このQ&Aのポイント
  • 左のリストボックスから右のリストボックスへのアイテム移動について問題が発生しています。
  • アイテムを複数同時に選択すると違うアイテムが移動したりすべてのアイテムが移動してしまう問題があります。
  • 現在のコードでは指定した動作がうまく実行されず、解決策を探しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

VB6で開発なのでしょうか? # 開発環境の情報も質問に盛り込みましょう であるなら リストボックスのItemDataを使って順序の制御をすることになりそうです 登録時に Private Sub Form_Load() With List1   .AddItem "FreeBSD"   .AddItem "Linux"   .AddItem "Macintosh"   .AddItem "MS-DOS"   .AddItem "Slaris"   .AddItem "Windows 95"   .AddItem "Windows CE"   .AddItem "Windows NT"   for n = 0 to .ListCount-1     .ItemData(n) = n   next End With としておきます リストの移動時に Private Sub Command1_Click()   dim m as Integer   m = 0   For i = List1.ListCount - 1 to 0 step - 1     If List1.Selected(i) = True Then       if list2.ListCount > 0 then         for m = 0 to List2.ListCount-1           ' ここで ItemData比較する           if list2.itemData(m) > list1.ItemData(i) then             exit for           end if         next       end if       ' 挿入位置が mに求められている       list2.additem List1.List(i), m       list2.ItemData(m) = List1.ItemData(i)       List1.RemoveItem i     End If   next End Sub といった具合でしょう VB.NET2002以降の場合は別途対応が必要です

rafa94420
質問者

お礼

失礼しました 開発環境はVB6.0になります redfox63さんのおかげで無事動作しました 本当にありがとうございました

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

ListBoxのListコレクションは0ベースになります つまり "FreeBSD"   ... 0 "Linux"    ... 1 "Macintosh"  ... 2 "MS-DOS"   ... 3 "Slaris"   ... 4 "Windows 95" ... 5 "Windows CE" ... 6 "Windows NT" ... 7 といった具合になります List1からList2へ移すのは List2.AddItem List1.List( i - 1 ) List1から移動した項目を削除するのは List1.RemoveItem i - 1 といった具合です 毎回 i-1 を引数に与えるより for i = List1.ListCount - 1 to 0 Step -1   if List1.Selected( i ) then     List2.AddItem List1.List(i)     List1.RemoveItem i   end if next とすることもあります

rafa94420
質問者

お礼

なるほど。 おかげでうまく動作させることができました! しかし右のリストにアイテムが移動した時に左のリストの並びとの上下が逆になってしまうのですが、これはどう対応したらよろしいのでしょうか・・・

すると、全ての回答が全文表示されます。

関連するQ&A