現在独学で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
このように指定しています。
解決法がありましたら教えてください。
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以降の場合は別途対応が必要です
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
とすることもあります
なるほど。
おかげでうまく動作させることができました!
しかし右のリストにアイテムが移動した時に左のリストの並びとの上下が逆になってしまうのですが、これはどう対応したらよろしいのでしょうか・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ListBox1をClickしたときのイベント 5 2022/12/11 19:45
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) リストボックス セルの値を取得する 1 2022/05/21 20:47
- Visual Basic(VBA) VBAユーザーフォームの複数のコンボボックスについて。 1 2022/04/25 08:13
- Visual Basic(VBA) リストポックスについて 2 2022/11/05 20:48
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) リストポックスへの抽出方法 1 2022/08/10 17:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードセットにnullの場合
-
subsequentとnextの違いってな...
-
VBA public変数はどのようなこ...
-
sublimit textっていうエディタ...
-
C#のループでtextboxに値を入れ...
-
[VB6] SQLの作成について
-
visual basic初心者です。 visu...
-
Pythonのre.split()の正規表現...
-
プログラムの素朴な質問です 分...
-
Functionの戻り値を配列にした...
-
Excel VBAでsub,dimは何の略?
-
VBSのプログラム
-
リストビューの列ヘッダーの幅...
-
エクセルVBAでテキストボッ...
-
二点の座標から距離や角度を求...
-
VB.NETでのイベントの途中終了
-
ユーザーフォームへのデータ入...
-
GetNextWindowがDLLファイルUse...
-
C言語のサフィックスについて
-
他のフォームから別のフォーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードセットにnullの場合
-
タイムアウトする仕組みを作りたい
-
subsequentとnextの違いってな...
-
verilogのcase文
-
【FPGA】VHDLのprocessとevent
-
vbsのmsgboxランダム表示について
-
TreeViewのTag情報取得
-
Verilogの文法
-
リスト間のアイテム移動について
-
日付の重複
-
文字の連結がうまくいかない
-
エクセルVBAついて ①if•••••the...
-
delphi
-
なんで? cEn-P^-1AP=P^-1(cEn-AP)
-
Scilabの&と&&に関する質問です
-
vb2010webページのリンクをクリ...
-
EXCEL VBA 文字 アドレス 検...
-
整順リスト形式の英単語辞書(pa...
-
Matlab
-
三項でたとえば交換って
おすすめ情報