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

Posted

技术标签:

【中文标题】PictureBox 中的 DragDrop - DragEnter 永远不会被调用【英文标题】:DragDrop in PictureBox - DragEnter never gets called 【发布时间】:2013-02-05 11:37:44 【问题描述】:

我想在我的PicureBoxes 中使用DragDrop,但永远不会调用DragDrop()DragEnter() 方法。

我创建了方法MouseMove,在这个方法中我调用了DoDragDrop(),它应该调用DragDrop()DragEnter()MouseMove 被调用但不休息。

表单构造函数:

public Form1()

   InitializeComponent();
   this.AllowDrop = true;
  

这是在PictureBox的构造函数中创建的:

this.DragDrop += new DragEventHandler(ttile_DragDrop);
this.DragEnter += new DragEventHandler(ttile_DragEnter);
this.MouseMove += new MouseEventHandler(ttile_MouseMove);

还有我的方法:

public void ttile_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)

   int i = 0;


public void ttile_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)

   int i = 0; 


public void ttile_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)

   if (e.Button == MouseButtons.Left)
   
      ((PictureBox)sender).DoDragDrop(sender, DragDropEffects.All);
   
 

【问题讨论】:

而不是MouseMove 尝试使用MouseDown 完全不清楚您要实现什么样的拖动操作。您的第一个 sn-p 建议您要放在表格上,第二个建议您要放在图片框上。您似乎有 两个 名为 ttile_DragEnter 的方法。您发布的那个是错误的,它没有设置e.Effect。这肯定行不通。 为什么要使用 Drag enter? @Mobstaa 我只是将一个图像从 PictureBox 拖到另一个 PictureBox。 【参考方案1】:

我遇到了类似的问题。问题是您的表格有AllowDrop,但没有图片。出于我忽略的原因,AllowDrop 不是PictureBox 的成员。

对我有用的技巧是替换

this.AllowDrop = True;

通过

((Control)myPictureBox).AllowDrop = True;

其中myPictureBox 是我的PictureBox 实例。

【讨论】:

Crazy.. 这对我有用(感谢您的提示)。奇怪的是,MSDN 声明 PictureBox 用 [BrowsableAttribute(false)] 覆盖 AllowDrop,这意味着它不会出现在 Intellisense 中,并且它明确指出“此 API 支持 .NET Framework 基础结构,不打算直接从您的代码中使用."。但是,如果没有这种解决方法,我无法让它工作! 即使没有类型转换也可以工作:myPictureBox.AllowDrop = true;【参考方案2】:
myPictureBox.AllowDrop = true;

尽管在 myPictureBox 的方法列表中看不到“AllowDrop”,但您可以使用此代码。

【讨论】:

以上是关于PictureBox 中的 DragDrop - DragEnter 永远不会被调用的主要内容,如果未能解决你的问题,请参考以下文章

在 PictureBox 中显示文件中的图像

PictureBox的内存问题

PictureBox中的图片实现鼠标滑轮控制缩放和平移

DragDrop 注册没有成功

使用 Access 数据库中的 URL 在 PictureBox 中显示图像

我应该如何从屏幕空间坐标转换为 WinForms PictureBox 中的图像空间坐标?