C# Windows窗体拖放功能
我似乎具备了Drag-n-Drop工作所需的所有功能,但是当我尝试将某个控件拖动到另一个控件时,我的代码没有被调用C# Windows窗体拖放功能,c#,winforms,visual-studio-2015,drag-and-drop,C#,Winforms,Visual Studio 2015,Drag And Drop,我似乎具备了Drag-n-Drop工作所需的所有功能,但是当我尝试将某个控件拖动到另一个控件时,我的代码没有被调用 我创建了一个用于创建数据的测试类: class TestClass { public TestClass() { Name = "Blank"; Id = -1; } public String Name { get; set; } public int Id { get; set; } pu
- 我创建了一个用于创建数据的测试类:
class TestClass { public TestClass() { Name = "Blank"; Id = -1; } public String Name { get; set; } public int Id { get; set; } public object Data { get; set; } public override String ToString() { return String.Format("{0}: {1}", Id, Name); } }
- 我创建了一个带有两个列表视图控件的空表单,
和listView1
:listView2
- 我为所有拖放方法创建了事件处理程序,并在其上设置了断点:
private void Form_DragDrop(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Copy; if (e.Data.GetDataPresent(typeof(TestClass))) { var item = e.Data.GetData(typeof(TestClass)) as TestClass; if (item != null) { // ? } } } private void Form_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Copy; if (sender.Equals(listView2)) { e.Effect = DragDropEffects.All; if (e.Data != null) { var format = GetString(e); Console.WriteLine("{0} has a(n) {1} entering it.", listView2.Name, format); } } } private void Form_DragLeave(object sender, EventArgs e) { if (sender.Equals(listView2)) { } } private void Form_DragOver(object sender, DragEventArgs e) { // Code Project Article 9017 says DragOver fires repeatedly, even if the mouse does not move. if ((e.X != _lastX) || (e.Y != _lastY)) { _lastX = e.X; _lastY = e.Y; if (e.Data.GetDataPresent(typeof(TestClass))) { } else { e.Effect = DragDropEffects.None; } } } private void Form_GiveFeedback(Object sender, GiveFeedbackEventArgs e) { if (sender.Equals(listView2)) { // ? } } private void Form_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) { var listView = sender as ListView; if (listView != null) { } } private String GetString(DragEventArgs e) { var result = String.Empty; if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) { var formats = e.Data.GetFormats(); foreach (var format in formats) { Console.WriteLine("Data is in the format of [{0}].", format); result = format; } } return result; }
- 在构造函数的
InitializeComponent()之后,我将两个控件连接起来代码>:
我遗漏了什么?您缺少一个方便的事件和启动拖动操作的方法:
listView1.ItemDrag += listView1_ItemDrag;
void listView1_ItemDrag(object sender, ItemDragEventArgs e) {
DoDragDrop(e.Item, DragDropEffects.Copy);
}
这是多么简单啊!谢谢
listView1.ItemDrag += listView1_ItemDrag;
void listView1_ItemDrag(object sender, ItemDragEventArgs e) {
DoDragDrop(e.Item, DragDropEffects.Copy);
}