工具VS2013,框架.NET 2.0
下載地址:
http://download.csdn.net/detail/donggege214/9092703
簡單介紹一下思路:
1、當鼠標點擊時,記下源位置(indexofsource)
2、當拖動時,記下鼠標所指的目標位置(indexoftarget)
3、將源位置的項,插入到目標位置
4、刪除源位置項
接下來簡單介紹下步驟:
1、在窗口中添加一個listbox
2、添加listbox的事件(在空白處雙擊就會自動生成事件)
3、代碼實現上述思路(貼的後臺全部代碼)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace List拖拽排序
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listBox1.AllowDrop = true;//允許ListBox拖動
IniLB();//初始化ListBox
}
/// <summary>
/// 在listbox中添加10個項
/// </summary>
public void IniLB()
{
for (int i = 0; i < 10; i++)
{
listBox1.Items.Add(i);
}
}
/// <summary>
/// 目標位置
/// </summary>
public int indexoftarget = -1;
/// <summary>
/// 源位置
/// </summary>
public int indexofsource = -1;
/// <summary>
/// 鼠標點擊listbox項時,記下源位置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
indexofsource = ((ListBox)sender).IndexFromPoint(e.X, e.Y);
if (indexofsource != ListBox.NoMatches)
{
((ListBox)sender).DoDragDrop(((ListBox)sender).Items[indexofsource].ToString(), DragDropEffects.Move);
}
}
/// <summary>
/// 拖動時,記錄目標位置,進行交換
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listBox1_DragDrop(object sender, DragEventArgs e)
{
ListBox listbox = (ListBox)sender;
indexoftarget = listbox.IndexFromPoint(listbox.PointToClient(new Point(e.X, e.Y)));
if (indexoftarget != ListBox.NoMatches)
{
//如果目標位置在源位置下方
if (indexoftarget > indexofsource)
{
listbox.Items.Insert(indexoftarget + 1, listbox.Items[indexofsource]);
listbox.Items.RemoveAt(indexofsource);
listbox.SelectedIndex = indexoftarget;
}
//如果目標位置在源位置上方
else if (indexoftarget < indexofsource)
{
listbox.Items.Insert(indexoftarget, listbox.Items[indexofsource]);
listbox.Items.RemoveAt(indexofsource + 1);
listbox.SelectedIndex = indexoftarget;
}
else
{ }
}
}
/// <summary>
/// 超出邊界,禁止拖動
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listBox1_DragOver(object sender, DragEventArgs e)
{
//拖動源和放置的目的地一定是一個ListBox
if (e.Data.GetDataPresent(typeof(System.String)) && ((ListBox)sender).Equals(listBox1))
{
e.Effect = DragDropEffects.Move;
}
else
e.Effect = DragDropEffects.None;
}
}
}