Winforms DragDrop的C#DragEnter事件

时间:2009-12-05 16:38:35

标签: c# drag-and-drop

为什么我们确实需要处理放置目标的DragEnter事件?

它在目的地的影响是什么?

在源

public partial class ToolBoxForm : System.Windows.Forms.Form
    {
        public ToolBoxForm()
        {
            InitializeComponent();
        }

        private void lbl_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            Label lbl = (Label)sender;
            lbl.DoDragDrop(lbl.Image, DragDropEffects.Link);
        }
    }

目的地:

public partial class DrawingArea : Form
    {
        public DrawingArea()
        {
            InitializeComponent();
        }

        private void DrawingArea_Load(object sender, System.EventArgs e)
        {
            ToolBoxForm toolBoxForm = new ToolBoxForm();
            this.AddOwnedForm(toolBoxForm);
            toolBoxForm.Show();

            pictureBox1.AllowDrop = true;
        }

        private void picDrawingArea_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.Bitmap))
            {
                e.Effect = DragDropEffects.Copy;                
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }

        private void picDrawingArea_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
        {
            Graphics g = pictureBox1.CreateGraphics();
            g.DrawImage((Image)e.Data.GetData(DataFormats.Bitmap), new Point(e.X - this.Left - 12, e.Y - this.Top - 30));
        }
    }

当我评论代码时:

if (e.Data.GetDataPresent(DataFormats.Bitmap))
                {
                    e.Effect = DragDropEffects.Copy;                
                }
                else
                {
                    e.Effect = DragDropEffects.None;
                }

图像未被删除。

2 个答案:

答案 0 :(得分:3)

DragDropEffects MSDN Page

  

<强>会员
    姓名 说明
  无 放置目标不接受数据。
  复制 来自拖动源的数据将复制到放置目标。
  移动 来自拖动源的数据将移至放置目标。
  链接 来自拖动源的数据会链接到放置目标。
  滚动 可以在拖动时滚动目标,以找到目标中当前不可见的放置位置。
  全部 复制,移动和滚动效果的组合。

如果你想接受掉落,你必须设置None以外的东西。

然而,下一篇引言让我相信它只是用于反馈:

  

您可以使用 DragDropEffects 显示不同的鼠标指针以进行拖放操作。例如,您可以为复制拖放操作显示加号,为移动拖放操作或红色圆圈显示箭头符号用一行代码表示拖放操作。

答案 1 :(得分:1)

我真的认为如果DragDropEvents保留为None(这是默认值),Drop事件将不会触发。这就是为什么图像不会掉落。