我无法通过GiveFeedback
控件获取ListView
事件。
下面的代码仅用于此测试,它会更新事件中的文本标签,只是为了查看触发的事件和时间。拖动项目时会label1
更新,项目会丢弃时会label3
。但为什么label2
永远不会更新?我错过了什么?
public Form1()
{
InitializeComponent();
listView1.ItemDrag += new ItemDragEventHandler(listView1_ItemDrag);
listView1.DragDrop += new DragEventHandler(listView1_DragDrop);
listView1.DragEnter += new DragEventHandler(listView1_DragEnter);
listView1.DragOver += new DragEventHandler(listView1_DragOver);
listView1.GiveFeedback += new GiveFeedbackEventHandler(listView1_GiveFeedback);
}
private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.All);
}
private void listView1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void listView1_DragOver(object sender, DragEventArgs e)
{
label1.Text = "DragOver " + DateTime.Now.ToString();
}
private void listView1_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
label2.Text = "GiveFeedback " + DateTime.Now.ToString();
}
private void listView1_DragDrop(object sender, DragEventArgs e)
{
label3.Text = "DragDrop " + DateTime.Now.ToString();
}
答案 0 :(得分:2)
DoDragDrop(e.Item, DragDropEffects.All);
这是问题的开始。您正在使用表单 DoDragDrop()方法。 GiveFeedback事件在拖动源上触发,与在放置目标上触发的其他事件不同。所以你订阅了错误的事件,应该是this.GiveFeedback而不是listView1.GiveFeedback。或者更明显的修复,因为您似乎只想为列表视图实现D + D:
listView1.DoDragDrop(e.Item, DragDropEffects.All);