背景:
研究拖放文件到Winform程序时发现在控件上设了允许拖放的属性(AllowDrop = true;)后,依然不能触发DragDrop事件的。
现象:
- DragEnter能够正常触发。
- DragDrop无法触发。
原因:
- DragEnter对于控件的意义主要在于识别拖放进来的对象是何种对象,需要在这里验证并判断是否需要接受及以何种方式接受拖放进来的对象。DragEnter通过参数(DragEventArgs)e.Effect判断如何接受拖放的对象。默认情况下e.Effect为DragDropEffects.None,表示控件不接受该对象,此时DragDrop即无法触发。至此,原因就分析完毕。
解决方案:
在DragEnter中将e.Effect的值设置为DragDropEffects枚举的其他值即可。不同的DragDropEffects会导致鼠标变化为不同的形状。如,我设置如下:
e.Effect = DragDropEffects.Move;
该设置会将鼠标变成箭头+下面一个虚线正方形的样子。