現在独学でhttp://www4.plala.or.jp/tamo/vb/vb99.htmlの問題の10番を解いてるのですが、どうしてもうまくいきません。
左のリストボックスから右のリストボックスへの1つ1つのアイテム移動はできたのですが、アイテムを複数同時に選択すると違うアイテムが移動したりすべてのアイテムが移動してしまいます。
今のコードは
Private Sub Command1_Click()
For i = List1.ListCount To 1 Step -1
If List1.Selected(i - 1) = True Then
List2.AddItem List1.Text
List1.RemoveItem List1.ListIndex
End If
Next
End Sub
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"
End With
End Sub
このように指定しています。
解決法がありましたら教えてください。
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以降の場合は別途対応が必要です
お礼
失礼しました 開発環境はVB6.0になります redfox63さんのおかげで無事動作しました 本当にありがとうございました