トップ  >  サンプルソース  >  ListBoxの項目ドラッグ(C#/VB.NET)

ListBoxの項目ドラッグ(C#/VB.NET)

2010年08月21日

ListBoxの項目(item)をドラッグ(マウス左ボタンを押して移動)するサンプル(ソース/コード)です。ListBoxの項目(item)をドラッグ&ドロップ(Drag&Drop)するイベントが用意されていないため、MouseDown、MouseUp、MouseMoveイベントを使用して実装しました。

' -----------------------------------------------------------
' ListBoxのitemをドラッグするサンプル(VB.NET/VS2005)
Private Sub Form1_Load( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) _
    Handles MyBase.Load

    ' ListBoxに項目を追加
    ListBox1.Items.Add("11111")
    ListBox1.Items.Add("22222")
    ListBox1.Items.Add("33333")
    ListBox1.Items.Add("44444")
    ListBox1.Items.Add("55555")
End Sub

Private DragIndex As Integer = -1
Private DropIndex As Integer = -1

Private Sub ListBox1_MouseDown( _
    ByVal sender As System.Object, _
    ByVal e As System.Windows.Forms.MouseEventArgs) _
    Handles ListBox1.MouseDown

    If e.Button = System.Windows.Forms.MouseButtons.Left Then
        ' マウスの左ボタンを押した
        DragIndex = ListBox1.IndexFromPoint( _
            New Point(e.X, e.Y))
    Else
        DragIndex = -1
    End If
    DropIndex = -1
End Sub

Private Sub ListBox1_MouseUp( _
    ByVal sender As System.Object, _
    ByVal e As System.Windows.Forms.MouseEventArgs) _
    Handles ListBox1.MouseUp

    ' マウスのボタンを上げた
    DragIndex = -1
    DropIndex = -1
End Sub

Private Sub ListBox1_MouseMove( _
    ByVal sender As System.Object, _
    ByVal e As System.Windows.Forms.MouseEventArgs) _
    Handles ListBox1.MouseMove

    If e.Button = System.Windows.Forms.MouseButtons.Left _
        And DragIndex >= 0 Then
        ' マウスの左ボタンを押したまま引きずった(ドラッグ)
        DropIndex = ListBox1.IndexFromPoint( _
            New Point(e.X, e.Y))

        If DragIndex >= 0 And DropIndex >= 0 And _
           DragIndex <> DropIndex Then
            If DragIndex < DropIndex Then
                ListBox1.Items.Insert(DropIndex + 1, _
                    ListBox1.Items(DragIndex).ToString())
                ListBox1.SelectedIndex = DropIndex + 1
                ListBox1.Items.RemoveAt(DragIndex)
            ElseIf DragIndex > DropIndex Then
                ListBox1.Items.Insert(DropIndex, _
                    ListBox1.Items(DragIndex).ToString())
                ListBox1.SelectedIndex = DropIndex
                ListBox1.Items.RemoveAt(DragIndex + 1)
            End If
            DragIndex = DropIndex
        End If
    End If
End Sub
' -----------------------------------------------------------

// ----------------------------------------------------------
// ListBoxのitemをドラッグするサンプル(C#.NET/VS2005)
private void Form1_Load(object sender, EventArgs e)
{
    // ListBoxに項目を追加
    listBox1.Items.Add("11111");
    listBox1.Items.Add("22222");
    listBox1.Items.Add("33333");
    listBox1.Items.Add("44444");
    listBox1.Items.Add("55555");
}

private int DragIndex = -1;
private int DropIndex = -1;

private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        // マウスの左ボタンを押した
        DragIndex = listBox1.IndexFromPoint(
            new Point(e.X, e.Y));
    }
    else
    {
        DragIndex = -1;
    }
    DropIndex = -1;
}

private void listBox1_MouseUp(object sender, MouseEventArgs e)
{
    // マウスのボタンを上げた
    DragIndex = -1;
    DropIndex = -1;
}

private void listBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left
        && DragIndex >= 0)
    {
        // マウスの左ボタンを押したまま引きずった(ドラッグ)
        DropIndex = listBox1.IndexFromPoint(
            new Point(e.X, e.Y));

        if (DragIndex >= 0 && DropIndex >= 0 &&
               DragIndex != DropIndex)
        {
            if( DragIndex < DropIndex ){
                listBox1.Items.Insert(DropIndex + 1,
                    listBox1.Items[DragIndex].ToString());
                listBox1.SelectedIndex = DropIndex + 1;
                listBox1.Items.RemoveAt(DragIndex);
            }
            else if (DragIndex > DropIndex)
            {
                listBox1.Items.Insert(DropIndex,
                    listBox1.Items[DragIndex].ToString());
                listBox1.SelectedIndex = DropIndex;
                listBox1.Items.RemoveAt(DragIndex + 1);
            }
            DragIndex = DropIndex;
        }
    }
}
// ----------------------------------------------------------
スポンサーサイト

迷惑(スパム)メール拒否 | トップページへ戻る | 自慢は高速シッポ振り

このページのトップに戻る

コメント

名前
題名
メールアドレス
WEBサイト
 
コメント
パスワード
  管理者にだけ表示を許可する

このページのトップに戻る

トラックバック

このページのトップに戻る