【发布时间】:2017-08-07 09:27:09
【问题描述】:
我创建了一个由两个图片框和两个标签组成的控件(称为表格)。
我正在尝试将它从一个面板拖放到另一个面板,但它不起作用。 这是我的代码:
void TableExampleMouseDown(object sender, MouseEventArgs e)
{
tableExample.DoDragDrop(tableExample, DragDropEffects.Copy);
}
void Panel2DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
void Panel2DragDrop(object sender, DragEventArgs e)
{
panel2.Controls.Add((Table) e.Data.GetData(e.Data.GetFormats()[0]));
}
显然,我在 panel2 中将 AllowDrop 设置为 true。当我单击 Table 对象(在 panel1 中)时,鼠标光标并没有改变。看起来 MouseDown 事件没有触发...
谢谢!
这是我订阅处理程序的构造函数代码的一部分:
this.tableExample.MouseDown += new System.Windows.Forms.MouseEventHandler(this.TableExampleMouseDown);
this.label2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Label2MouseDown);
this.panel1.DragDrop += new System.Windows.Forms.DragEventHandler(this.Panel1DragDrop);
this.panel1.DragEnter += new System.Windows.Forms.DragEventHandler(this.Panel1DragEnter);
【问题讨论】:
-
所以在
MouseDown中放置一个breakpoint 看看它是否会触发。 -
我试过了,发现它没有触发...相反,如果我在 TextBox 等标准控件上执行相同的操作,它可以正常工作...
-
所以您似乎并没有真正订阅该活动......请参阅下面的答案。
-
您实际点击这些 pbox 或标签之一的几率是多少?这会触发 他们的 MouseDown 事件,而不是 UserControl 的。您必须通过为这些控件订阅所有 MouseDown 事件并调用 this.OnMouseDown() 来解决此问题。绘制一个吸引用户单击以开始拖动的字形将是明智的。对于面板来说也是如此,当您向其添加控件时,其事件触发的几率会降低。请注意,您在错误的控件上设置了 AllowDrop,“panel1”似乎与名为“Panel2”的控件的事件没有太大关系。
-
查看我的回答更新。
标签: c# .net drag-and-drop