В интернете достаточно много статей в которых описывается, как реализовать перемещение элементов списка ListBox с помощью кнопок «Переместить вверх» «Переместить вниз». Но примера реализации перемещения с помощью мыши я так и не нашел (быть может плохо искал :). Поэтому решил написать отдельную статью, возможно кому-то будет полезно.
Идею я реализовал с помощью функции Drag&Drop. Привожу сразу код.
Я прокомментировал основные моменты, поэтому, думаю, вопросов не должно возникнуть:
//индекс перемещаемого элемента
int indexToMove;
public Form1()
{
InitializeComponent();
listBox1.AllowDrop = true;
//подписываемся на события
listBox1.MouseMove += new MouseEventHandler(listBox1_MouseMove);
listBox1.DragEnter += new DragEventHandler(listBox1_DragEnter);
listBox1.DragDrop += new DragEventHandler(listBox1_DragDrop);
//заполняем список
for (int i = 0; i < 10; i++)
{
listBox1.Items.Add(i);
}
}
private void listBox1_MouseMove(object sender, MouseEventArgs e)
{
//если нажата левая кнопка мыши, начинаем Drag&Drop
if (e.Button == MouseButtons.Left)
{
//индекс элемента, который мы перемещаем
indexToMove = listBox1.IndexFromPoint(e.X, e.Y);
listBox1.DoDragDrop(indexToMove, DragDropEffects.Move);
}
}
private void listBox1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void listBox1_DragDrop(object sender, DragEventArgs e)
{
//индекс, куда перемещаем
//listBox1.PointToClient(new Point(e.X, e.Y)) - необходимо
//использовать поскольку в e храниться
//положение мыши в экранных коородинатах, а эта
//функция позволяет преобразовать в клиентские
int newIndex = listBox1.IndexFromPoint(listBox1.PointToClient(new Point(e.X, e.Y)));
//если вставка происходит в начало списка
if (newIndex == -1)
{
//получаем перетаскиваемый элемент
object itemToMove = listBox1.Items[indexToMove];
//удаляем элемент
listBox1.Items.RemoveAt(indexToMove);
//добавляем в конец списка
listBox1.Items.Add(itemToMove);
}
//вставляем где-то в середину списка
else if (indexToMove != newIndex)
{
//получаем перетаскиваемый элемент
object itemToMove = listBox1.Items[indexToMove];
//удаляем элемент
listBox1.Items.RemoveAt(indexToMove);
//вставляем в конкретную позицию
listBox1.Items.Insert(newIndex, itemToMove);
}
}
В итоге мы получаем возможность перемещать мышью элементы списка ListBox

ListBoxMouseMoveItem.rar (34,1 KiB, 1 574 закачек)
Похожие статьи
Человек!!! Я люблю тебя!!! ты меня спас))
Спасибо!!!