C# WinForms ListBox 拖曳調整順序 示範

ListBox 是用於顯示清單的物件,可以用來單選和多選,本篇來示範使用滑鼠左鍵按住清單,拖曳到其他選項上後放開滑鼠左鍵,讓選取的內容移動到新的位置。

首先先動態建立 ListBox ,指定為可以拖曳,並加入至 Form 上
    
ListBox listBox = new();
listBox.AllowDrop = true;
this.Controls.Add(listBox);
    

加入範例選項
    
listBox.Items.Add("Item 1");
listBox.Items.Add("Item 2");
listBox.Items.Add("Item 3");
listBox.Items.Add("Item 4");
    

定義點擊時會將點選的選項紀錄,讓拖曳時使用。並且判斷滑鼠放開的位子,將原先資料移除後重新新增到指定位子
    
listBox.MouseDown += (_, _) =>
{
    if (listBox.SelectedItem == null) return;
    listBox.DoDragDrop(listBox.SelectedItem, DragDropEffects.Move);
};
listBox.DragOver += (sender, args) => { args.Effect = DragDropEffects.Move; };
listBox.DragDrop += (sender, args) =>
{
    if (args.Data == null) return;
    Point point = listBox.PointToClient(new Point(args.X, args.Y));
    int index = listBox.IndexFromPoint(point);
    if (index < 0) index = listBox.Items.Count - 1;
    object data = args.Data.GetData(typeof(string));
    listBox.Items.Remove(data);
    listBox.Items.Insert(index, data);
};
    


留言