先程リストビューについて質問した者です。
私ではない方が解決と更新してしまいました。
通りすがりのネコさんありがとうございます。
できればマウスでクリックしているリストビューの項目を削除し、
その下の項目が一つずつ上に詰められ、
空欄ができないようにしたいのですが、
どなたかご指導ください。
リストビューの項目の数が決まっていなくて、ある項目を削除した時
その空欄に一つ下の項目が一つずつ上がっていくようにしたいのですが、
以下のコードだと最後の空白行の処理でエラーが起きます。
どなたかいい方法をご存知ではないでしょうか?
Dim i As Integer
For i = 1 To 30 Step 1 '本当は何個か不定ですが30にしておきました。
If frmMain.lstv.ListItems(i).Text = " " Then
If frmMain.lstv.ListItems(i + 1).Text = " " Then Exit For
frmMain.lstv.ListItems(i).Text =
frmMain.lstv.ListItems(i + 1).Text
frmMain.lstv.ListItems(i).SubItems(1) =
frmMain.lstv.ListItems(i + 1).SubItems(1)
End If
Next
選択しているアイテムのインデックス
frmMain.lstv.SelectedItem.Index
リストビューの項目数
frmMain.lstv.ListItems.Count
などが取得できます。あとは、このインデックスを用いてやれば...
通りすがりのネコさんのからお教え頂いたとおり
frmMain.lstv.ListItems.Countを使って以下のコードで
うまくいきました。二度も教えて頂いて本当にありがとうございました。
Private Sub cmdSakujoOK_Click()
frmMain.lstv.SelectedItem.Text = " "
frmMain.lstv.SelectedItem.SubItems(1) = " "
Dim i As Integer
Dim u As Integer
u = frmMain.lstv.ListItems.Count - 1
For i = 1 To u Step 1
If frmMain.lstv.ListItems(i).Text = " " Then
frmMain.lstv.ListItems(i).Text =
frmMain.lstv.ListItems(i + 1).Text
frmMain.lstv.ListItems(i).SubItems(1) =
frmMain.lstv.ListItems(i + 1).SubItems(1)
frmMain.lstv.ListItems(i + 1).Text = " "
frmMain.lstv.ListItems(i + 1).SubItems(1) = " "
End If
Next
Private Sub cmdSakujoOK_Click()
if frmMain.lstv.SelectedItem.Index > 0 then
frmMain.lstv.ListItems.Remove frmMain.lstv.SelectedItem.Index
endif
End Sub
のように使うのだと思っていましたが...
せっかくなので、もう一言。
リストビューへの項目の追加ってAddですよね。
その場合、逆の削除は普通はRemoveです。
> frmMain.lstv.SelectedItem.Text = " "
> frmMain.lstv.SelectedItem.SubItems(1) = " "
は、項目を削除しているのではなくて、項目の文字を空白にしているだけなので、
frmMain.lstv.ListItems.Count はいつまで経っても減少しません。
つまり、項目を削除したことにはならないと思うのですが...
マウスで削除リストビューの下のほうをクリックしたら、
空欄が選択されると思います。
(わざと項目を空白にしておきたい理由があるのでしたらごめんなさい)
通りすがりのネコさんの言うとおりです。
初心者なのでRemoveの使い方が分からず、空白にして1行上げるって
処理をめざしてしまい、あんなに無駄に長いコードを書くことになって
しまいました。
通りすがりのネコさんの方法だと単純に
Private Sub cmdSakujoOK_Click()
frmMain.lstv.ListItems.Remove frmMain.lstv.SelectedItem.Index
Me.Hide
End Sub
追加指導ありがとうございました。
でできました。