GiveFeedback事件未触发

时间:2015-12-12 17:49:19

标签: c# winforms events drag-and-drop

我无法通过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();
}

1 个答案:

答案 0 :(得分:2)

   DoDragDrop(e.Item, DragDropEffects.All);

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

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