先设置ListBox的AllowDrag属性
this.lstCells.AllowDrop = true;
设置事件
this.lstCells.DragEnter += new System.Windows.Forms.DragEventHandler(this.lstCells_DragEnter);
this.lstCells.DragDrop += new System.Windows.Forms.DragEventHandler(this.lstCells_DragDrop);
this.lstCells.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lstCells_MouseDown);
private void lstCells_MouseDown(object sender, MouseEventArgs e)
{
if (((ListBox)sender).Items.Count == 0)
return;
int index = ((ListBox)sender).IndexFromPoint(e.X, e.Y);
if (index < 0) return;
string s = ((ListBox)sender).Items[index].ToString();
DragDropEffects dde1 = DoDragDrop(s,
DragDropEffects.Move);
if (s == ((ListBox)sender).Items[index].ToString())
((ListBox)sender).Items.RemoveAt(index);
else
((ListBox)sender).Items.RemoveAt(index + 1);
}
private void lstCells_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.StringFormat))
{
int indexPos = ((ListBox)sender).IndexFromPoint(((ListBox)sender).PointToClient(new Point(e.X, e.Y)));
if (indexPos > -1)
((ListBox)sender).Items.Insert(indexPos, lstCells.SelectedItem);
else
((ListBox)sender).Items.Add(lstCells.SelectedItem);
}
}
private void lstCells_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
}