- PR -

ListView LargeIconでのアイテム配置について

1
投稿者投稿内容
Kuni
会議室デビュー日: 2007/06/05
投稿数: 1
投稿日時: 2007-06-05 23:11
初めて投稿します。
現在、VB2003 ListViewにて、選択されたアイテムを移動させ、
任意の順序に並べる機能を作っています。
(コレクションエディタのようにボタンで上や下へ移動させるイメージです)

ListViewのAutoArrangeプロパティをFalseに設定し
アイテムの入れ替えにはIndexを利用、コードは簡単ですが以下のような感じです

コード:
Dim L As ListViewItem = ListView1.SelectedItems(0)
L.Remove
ListView1.Insert(newIdx,L)



この際、View=DetailsやListでは、アイテム入れ替え時にその通り動くのですが
LargeIcon、SmallIconでは動いてくれません。
(IndexをDBへ保存しているのでその都度読み込みなおせばできるのですが、

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16449&forum=7

を見てみましたが、アイコン表示の場合、
自分で位置を設定しなければ行けないものなんでしょうか?
どうぞ宜しくお願いします。

momo2
会議室デビュー日: 2006/10/19
投稿数: 2
投稿日時: 2007-08-17 16:53
2ヶ月以上の遅レスなのでもうKuniさんも解決済みかもしれませんが...
私も同様の問題ではまりました。

ListViewItemSorterでindex順の並べ替えを行ってやるとうまくいくようです。
ListViewItemSorterはindex順「以外」で並べ替えを行うためのものという感覚があったのですが
MSDNでもそのようなサンプルがあるのでLargeIcon、SmallIconは
どうもListViewItemSorterでindex順の並べ替えを再度行ってやらなければ
いけないみたいです

参考まで主要なコード部分の抜粋を(VB.NET 2003で動作確認済み)
Formのコンストラクタ
コード:

Public Sub New()
:
' InitializeComponent() 呼び出しの後に初期化を追加します。
Me.ListView1.ListViewItemSorter = New ListViewIndexComparer


並べ替えのイベントプロシージャ
コード:

Dim newIdx As Integer = 並べ替えたいインデックス
Dim L As ListViewItem = ListView1.SelectedItems(0)
L.Remove()
ListView1.Items.Insert(newIdx, L)


Formクラス内にプライベートクラス追加
コード:

Private Class ListViewIndexComparer
Implements System.Collections.IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements System.Collections.IComparer.Compare
Return CType(x, ListViewItem).Index - CType(y, ListViewItem).Index
End Function
End Class


私の会社のサイトでも開発者向けTipsとして扱っていますので
よろしければご覧ください
C#(2005)ですがサンプルコード1式ダウンロードできます

[ メッセージ編集済み 編集者: momo2 編集日時 2007-08-17 16:54 ]

[ メッセージ編集済み 編集者: momo2 編集日時 2007-08-17 16:57 ]
1

スキルアップ/キャリアアップ(JOB@IT)