C#.NETメモ:リストボックスの並び替え

ドラッグ&ドロップでリストボックスを並び替える方法をメモしておきます。
先日作ったソフトの操作性を上げる為に書いたものです。
なるべくこういうのは自分で考えて書くようにしてるので、もっと良い書き方は他にあるかもしれませんが…。

以下にコードを記しておきます。
今回はListBoxを継承して使っています。

public class MyListBox : ListBox
{
    int listSelectNo;
    public MyListBox()
    {
        string[] str = {"aaa", "bbb", "ccc", "ddd", "eee"};
        this.Items.AddRange(str);

        //イベント設定
        this.MouseDown += new MouseEventHandler(MyListBox_MouseDown);
        this.MouseUp += new MouseEventHandler(MyListBox_MouseUp);
    }

    //移動元の項目をマウスを押す
    private  void MyListBox_MouseDown(object sender, MouseEventArgs e)
    {
        //移動元のインデックスを取得
        ListBox list = (ListBox)sender;
        listSelectNo = list.SelectedIndex;
    }

    //移動先の項目でマウスを離すと項目移動
    private void MyListBox_MouseUp(object sender, MouseEventArgs e)
    {
        //移動先のインデックスを取得
        ListBox list = (ListBox)sender;
        int listChangeNo = list.SelectedIndex;
        object tmpData;

        //移動元のデータを取得
        tmpData = list.Items[listSelectNo];

        //移動元のデータを削除
        list.Items.RemoveAt(listSelectNo);

        //移動先にデータを追加
        list.Items.Insert(listChangeNo, tmpData);

        //選択先のインデックスを指定
        list.SelectedIndex = listChangeNo;
    }
}

内容は以上のコードの通りです。
マウスを押して指定した項目を一時保存して、マウスを離した位置に移動させます。
各関数の内容は以下の通りです。

ListBox.Items.Insert(インデックス,データ)
  →インデックスの位置にデータと項目として追加します。

ListBox.RemoveAt(インデックス)
  →インデックスの位置の項目を削除します。

それにしても.NETは便利ッスね。
私でもこれくらい簡単に書けてしまう。
ただし半端なく起動が遅いのが難点ですよね。
C++のほうも覚えたいなあ…。



コメント
コメントする








    
この記事のトラックバックURL
トラックバック