DragEventArgs的Effect属性是影响显示效果吗? 还是影响运行效果?

oiuaeor 2014-08-20 11:23:40
我从网上摘了一小段程序,是在winform上创建一个button,推拽这个button并放下,就建立一个新的button。

代码如下:

public Form1()
{
InitializeComponent();
}

private void Form1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof (Button)))
e.Effect = DragDropEffects.Copy;
}

private void Form1_DragDrop(object sender, DragEventArgs e)
{
Button btn = new Button();
btn.Size = button1.Size;
btn.Location = this.PointToClient(new Point(e.X, e.Y));
this.Controls.Add(btn);
btn.Text = "按钮";
}

private void button1_MouseMove(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
button1.DoDragDrop(button1, DragDropEffects.Copy | DragDropEffects.Move);
}

程序可以如我预期的运行,但是我有几点疑问
(1) e.Effect = DragDropEffects.Copy这句话的用处到底是什么? 我发现改成DragDropEffects.Move效果也是一样的。如果Copy这个值是为了保证控件被拷贝,那么还要我手动用代码来创建一个新的按钮有什么用呢?
(2) 我发现不能去掉e.Effect = DragDropEffects.Copy这句话,去掉了,什么功能就都没有了。我原本以为Effect只是鼠标的样式变成一个拖拽的鼠标,没料到这个如果去掉了就完全没有了拖拽的能力。
(3) 改成DragDropEffects.Link就不行

综上,这个Effect属性到底是做什么用的呢?
...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Forty2 2014-08-20
  • 打赏
  • 举报
回复
就是'鼠标的样式'。 至于‘DragDropEffects.Link就不行’,则是因为开始拖拽时,你的代码允许Copy和Move两种效果。
引用 楼主 oiuaeor 的回复:
... button1.DoDragDrop(button1, DragDropEffects.Copy | DragDropEffects.Move);
於黾 2014-08-20
  • 打赏
  • 举报
回复
Effect 直接翻译过来,是效果 它不是Style 所以不仅仅是个光标
oiuaeor 2014-08-20
  • 打赏
  • 举报
回复
引用 2 楼 Forty2 的回复:
就是'鼠标的样式'。 至于‘DragDropEffects.Link就不行’,则是因为开始拖拽时,你的代码允许Copy和Move两种效果。 [quote=引用 楼主 oiuaeor 的回复:] ... button1.DoDragDrop(button1, DragDropEffects.Copy | DragDropEffects.Move);
[/quote] OK,诚然像你说的那样; 那么我现在的问题是: 如果没有

e.Effect = DragDropEffects.Copy
这句话,我发现任何鼠标拖拽都没有起作用。添加按钮的代码是在Form1_DrapDrop里面实现的,为何不设置鼠标样式,连功能都会出不来呢?

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧