C#を攻略しよう

c#

リストボックス内でドラッグアンドドロップ

リストボックス間でドラッグアンドドラッグするサンプルプログラムです。

リストボックス間でドラッグアンドドロップ
リストボックス内でドラッグアンドドロップ
 エクスプローラーからのドラッグ&ドロップ

ドラッグアンドドロップ


[TOP]


1.「ファイル」→「新しいプロジェクト」→「WINDOWSアプリケーション」を選択。

2.ツールボックスから「ListBox」を上図のように配置する。

3.「listBox1」の「AllowDrop」プロバティを「true」にする。

4.「listBox1」から「MouseDown」イベント、「DragEnter」イベントと「DragDrop」イベントを選択し 、次のコードを入力する。(黒文字部分)

public partial class Form1 : Form
{

    int index; //ドラッグ開始時のListBoxのインデックス
    int max; //ListBoxのアイテムの数

    public Form1()
    {

        InitializeComponent();
        listBox1.Items.Add("りんご");//アイテム追加
        listBox1.Items.Add("バナナ");
        listBox1.Items.Add("みかん");
        listBox1.Items.Add("レモン");
        max = listBox1.Items.Count;
    }

    private void listBox1_MouseDown(object sender, MouseEventArgs e)
    {

        Point p = Control.MousePosition;
        p = listBox1.PointToClient(p);//ドラッグ開始時のマウスの位置をクライアント座標に変換
        index = listBox1.IndexFromPoint(p);//マウス下のListBoxのインデックスを得る
        if (index > -1)
        {
            listBox1.DoDragDrop(listBox1.Items[index].ToString(), DragDropEffects.Copy);//ドラッグスタート
        }
    }

    private void listBox1_DragEnter(object sender, DragEventArgs e)
    {

        e.Effect = DragDropEffects.Copy;//ドラッグ&ドロップの効果を、コピーに設定
    }

    private void listBox1_DragDrop(object sender, DragEventArgs e)
    {

        //ドラッグしてきたアイテムの文字列をstrに格納する
        string str = e.Data.GetData(DataFormats.Text).ToString();

        Point p = Control.MousePosition;
        p = listBox1.PointToClient(p);//ドロップ時のマウスの位置をクライアント座標に変換
        int ind = listBox1.IndexFromPoint(p);//マウス下のLBのインデックスを得る
        if (ind > -1 && ind < max)
        {
            listBox1.Items[index] = listBox1.Items[ind];
            listBox1.Items[ind] = str;
        }
    }
}

メソッドの上にマウスポインタをもってくると、ポップアップヒントが表示されます。またF1キーを押すと、ヘルプが立ち上がります。

 

 

※当サイトは、リンクフリーです。