调用 DoDragDrop 方法的控件是不是重要?

Posted

技术标签:

【中文标题】调用 DoDragDrop 方法的控件是不是重要?【英文标题】:Does it matter on which control you call the DoDragDrop method?调用 DoDragDrop 方法的控件是否重要? 【发布时间】:2011-05-25 20:10:42 【问题描述】:

我想知道在 Windows 窗体应用程序中调用 DoDragDrop 方法的控件是否会有所不同。

我有一个带有两个 PictureBox 控件的表单。一个可以拖动,另一个的 AllowsDrop 属性设置为 true。

可拖动 PictureBox 的 MouseDown 事件处理程序如下:

    private void dragPictureBox_MouseDown(object sender, MouseEventArgs e)
    
        if (sender is PictureBox)
        
            var pictureBox = (PictureBox) sender;
            var effect = pictureBox.DoDragDrop(
                pictureBox.Image, DragDropEffects.All);
            MessageBox.Show("Drag ended in a " + effect);
        
    

但我似乎可以使用任何控件,而不是在图片框上调用 DoDragDrop,例如表单本身

var effect = this.DoDragDrop(pictureBox.Image, DragDropEffects.All);

甚至

var effect = label1.DoDragDrop(pictureBox.Image, DragDropEffects.All);

调用 DoDragDrop 方法对哪个控件有影响吗?如果有,有什么区别?

【问题讨论】:

【参考方案1】:

它没有很好的记录,但我相信它会影响哪个控件会引发QueryContinueDrag 事件。

所有示例都倾向于使用拖动数据的来源,所以我会坚持使用它。

【讨论】:

你是绝对正确的。 GiveFeedback 事件也是如此。有趣的是,这两个事件在拖动操作期间不断发生,尽管文档指出它仅在键盘或鼠标按钮状态发生变化时发生。

以上是关于调用 DoDragDrop 方法的控件是不是重要?的主要内容,如果未能解决你的问题,请参考以下文章

WPF之实现控件内容拖动

DoDragDrop 和 MouseUp

WinForm实现简单的拖拽功能(C#)

使用鼠标拖放复制文本

imag.js|快速掌握全局方法

PictureBox 中的 DragDrop - DragEnter 永远不会被调用