ผู้เขียนจะอธิบาย Code การทำ Drad and Drop กับ Listbox 2 ตัว คือ LisBox1 กับ ListBox2 ตามรูปด้านล่าง
ในหน้า Design วาง ListBox ทั้ง 2 ตัวไว้คนละข้างของฟอร์ม พร้อมใส่ Item ให้ ListBox1 (ListBox2 ให้กำหนด AllowDrop เป็น true ด้วย) |
กำหนด Event MouseDown เพื่อให้ทำงานในขณะที่เกิดการกดเมาส์ลงบน ListBox1 |
ใส่ Code คำสั่งในส่วนของ Event Mouse Down
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
//ถ้าใน Listbox1 ไม่มี item อยู่เลยก็ไม่ต้องทำงานคำสั่งด้านล่าง
if (listBox1.Items.Count == 0) return;
//หา Index ของ item ใน Listbox1 จากการกดเมาส์
int index = listBox1.IndexFromPoint(e.X, e.Y);
//เก็บค่าของ item ในรูปแบบของ string
string s = listBox1.Items[index].ToString();
//เรียกใช้ function DoDragDrop พร้อมส่ง parameter 2 ตัว
DragDropEffects dde1 = DoDragDrop(s,DragDropEffects.All);
//ตรวจสอบว่า DragDropEffects อยู่ในหมวดใด
if (dde1 == DragDropEffects.All)
{
//หากตรงตามหมวดที่ใช้งาน ให้ลบ item ออกหลังจากที่ลาก item ออกไปแล้ว
listBox1.Items.RemoveAt(listBox1.IndexFromPoint(e.X, e.Y));
}
}
สถานะต่างๆของ DragDropEffects
- All : จะสามารถทำ copied , remove ไปจากต้นทาง และให้ย้ายไปที่ปลายทางได้
- Copy : เป็นการคัดลอกไปที่ปลายทาง
- Link : ต้นทางเชื่อมโยงกับปลายทาง
- Move : ย้ายจากต้นทางไปที่ปลายทาง
- None : ไม่ยอมให้วางที่ปลายทาง
- Scroll : อยู่ในระหว่างการไปที่ปลายทาง
ส่วนใน ListBox2 จะมีการใช้งานอยู่ 2 Event คือ DragOver และ DragDrop
//Event Drag Over คือการลากมาถึง
private void listBox2_DragOver(object sender, DragEventArgs e)
{
//ให้กำหนดค่า effect เป็น DragDropEffects All
e.Effect = DragDropEffects.All;
}
//เมื่อวางลงบน ListBox2
private void listBox2_DragDrop(object sender, DragEventArgs e)
{
//ตรวจสอบว่าเป็นค่าที่ถูกลากมาเป็นชนิดตัวอักษร หรือข้อความหรือไม่
if (e.Data.GetDataPresent(DataFormats.StringFormat))
{
//หากเป็นข้อความให้แปลงใส่ในตัวแปร string
string str = (string)e.Data.GetData(DataFormats.StringFormat);
//เพิ่ม item ให้กับ ListBox2
listBox2.Items.Add(str);
}
}
เสร็จเรียบร้อย พร้อมทดสอบการทำงานได้ โดยให้กดเมาส์ค้าง ลากข้อความจาก ListBox1 มาจนถึง ListBox2 แล้วปล่อยเมาส์ จะพบว่า item ที่อยู่ใน ListBox1 จะย้ายมาอยู่ใน ListBox2
item จาก Listbox1 จะย้ายมาอยู่ใน ListBox2 ตามภาพ |
ที่มา : http://www.codeproject.com/KB/dotnet/csdragndrop01.aspx
ขอบคุณมากๆครับ
ตอบลบ