GiveFeedback事件未启动

本文关键字:启动 事件 GiveFeedback | 更新日期: 2023-09-27 18:26:43

我的ListView控件无法触发GiveFeedback事件。下面的代码只是用于此测试,它更新了事件的文本标签,只是为了查看哪些事件以及何时触发。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();
}

GiveFeedback事件未启动

   DoDragDrop(e.Item, DragDropEffects.All);

这就是问题的根源。您正在使用表单的DoDragDrop()方法。GiveFeedback事件是在拖动源上激发的,与在放置目标上激发的其他事件不同。所以你订阅了错误的活动,应该是这个。GiveFeedback而不是listView1.GiveFeedback.或者更明显的修复方法,因为你似乎只想为listview实现D+D:

   listView1.DoDragDrop(e.Item, DragDropEffects.All);