前回はシリアル化できるリストボックスを作成しました。

シリアル化できるリストボックス 自作コントロール

シリアル化できるリストボックスのソースコード 自作コントロール

今回は複数のリストボックスを作成して内容を同期させるリストボックスを作成します。

簡単な説明

ユーザーコントロールを作成してこのなかにListBoxを入れます。

作成するクラスはSynchronizedListBox<T>とします。TはSynchronizedDataクラスを継承しているクラスでないといけません。

SynchronizedGroupというプロパティを作成して、これが同じコントロールが同期の対象となります。またSynchronizedListBox<T>クラスはアイテムとデータをリンクさせることができます。どのアイテムが選択されているかで表示内容を変更することができます。

使用できるメソッド

void AddItem(T data)
アイテムを最後に追加します。

void InsertItem(T data, int index)
アイテムを指定した場所に追加します。

void RemoveItem(int index)
指定した場所にあるアイテムを削除します。

void ClearItems()
アイテムをすべて削除します。

void MoveItem(int fromIndex, int toIndex)
第一引数で指定されたアイテムを第二引数で指定した場所に移動します。

void MoveItemLast(int fromIndex)
第一引数で指定されたアイテムを最後に移動します。

T GetData(int i)
第一引数で指定された場所にあるデータを取得します。

List<T> GetDataList()
シリアル化のためにデータのリストを取得します。

void SetDataList(List<T> dataList)
逆シリアル化で得られたデータのリストからリストボックスのアイテムを復元します。

virtual void OnDragOverItem(DragDropItemArgs e)
アイテムがドラッグオーバーされているときに呼び出されます。

virtual void OnDragOverObject(DragEventArgs e)
なにかがドラッグオーバーされているときに呼び出されます。

virtual void OnDragDropItem(DragDropItemArgs e)
アイテムがドロップされたときに呼び出されます。

virtual void OnDragDropObject(DragEventArgs e)
なにかがドロップされたときに呼び出されます。

virtual void OnSelectedIndexChanged(SelectedIndexChangedArgs e)
選択されているアイテムが変更されたときに呼び出されます。

プロパティ

SynchronizedGroup
これが同じリストボックスが同期の対象となります。

bool AllowDrop
ドラッグ&ドロップを許可するかどうかを設定します。

int SelectedItemIndex
選択されているアイテムのインデックスを取得・設定します。

イベント

DragOverItem
アイテムがドラッグオーバーされているときに発生するイベントです。

DragOverObject
何かががドラッグオーバーされているときに発生するイベントです。

DragDropItem
アイテムがドロップされたときに発生するイベントです。

DragDropObject
何かががドロップされたときに発生するイベントです。

SelectedIndexChanged
選択されているアイテムが変更されたときに発生するイベントです。

ソースコードは次回示します。

同期化されたリストボックスのソースコード 自作コントロール

使い方の一例

前回とほとんど同じです。アイテムの追加、移動、ドラッグ&ドロップをするともうひとつのリストボックスも同じように変化します。