c# - GiveFeedback 事件未触发

标签 c# winforms events drag-and-drop

我的 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();
}

最佳答案

   DoDragDrop(e.Item, DragDropEffects.All);

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

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

关于c# - GiveFeedback 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34243040/

相关文章:

python - 将代码存储在列表或字典中?

jquery - 标签上可编辑,如何防止它在点击时失去焦点?

c# - 订阅类别流,事件永远不会出现在订阅客户端

c# - 在 Visual Studio 中不断得到 "Loading toolbox content from package",这需要永远!

c# - WCF 服务在每次调用时实例化

.net - Windows 窗体应用程序的现代 UI 应用程序设计

mysql - 使用 MySQL 事件更新值

c# - 如何识别/检查模糊图像?

C# MSAGL 更改图标

c# - 以基本形式定义的自定义属性在重建时以继承形式丢失其状态