“GiveFeedback”事件未触发。

4

我无法使我的 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();
}
1个回答

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

问题从这里开始。您正在使用表单的DoDragDrop()方法。 GiveFeedback事件在拖动源上触发,而不像其他事件那样在放置目标上触发。因此,您订阅了错误的事件,应该是this.GiveFeedback而不是listView1.GiveFeedback。或更明显的修复方式,因为您似乎只想为列表视图实现D+D:

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

谢谢!这么简单的修复,但完全没想到。 - darx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接