2013-02-11 127 views
0

我正在开发一个业余爱好项目来加强我的应用程序开发技能。有一件事给我带来一些麻烦。将元素拖放到新区域

我的项目是一个字符发生器D & D.在一个部分我产生属性分数。我有一个打开'生成'面板的按钮。生成面板有6个属性区域,当它们满足一些要求时(从列表中选择一个生成方法并单击按钮),这些属性区域将被编程填充。

每种生成方法只允许用户将六个分数分配给他们的六个属性。

我可以很容易地将这些可点击的按钮打开一个对话框(或模态,或类似的)来选择分配选定分数的位置,但这不会教我任何新东西。

我想要做的是让用户将属性分数(当前是面板中的文本框)拖放到他们想要分配给它的属性上(当前每个属性都是由一个文本框,一个标签和另一个文本框,我希望用户能够将这个值放入这三个区域中的任何一个)。

我还想允许用户拖放属性分数之间的值,但这应该很容易地从第一部分的答案开始。

总之,我该如何让用户可以将控件的值拖到应用程序中的另一个控件

回答

0

经过大量的搜索后,我发现了this article,它描述了在.NET webforms中拖放的基本要素。

下面复制是要领:

在MouseDown事件中要拖拽,关火“的DoDragDrop”事件,传递你要删除的数据是什么和什么你DragDropEffects值想要实现。

在可以接受拖动&滴对象,运行这样的代码的MouseEnter事件:

if ((e.AllowedEffect & DragDropEffects.Link) != 0 

    && e.Data.GetDataPresent(typeof(string))) 

    e.Effect = DragDropEffects.Link; 

e.AllowedEffect是按位,并且可以匹配针对多个影响。

设置e.Effect表示控件可以接受丢弃的数据。您设置为'.Effect'的效果决定了鼠标的外观。

最后,在'DragDrop'事件的任何控制接受丢弃的数据,您可以通过使用'e.Data.GetData'访问移动的数据 - 这将返回一个castable对象。

这并不能解决我的一些问题(值得注意的是,鼠标不会带有数据的“阴影”),但这是一个很好的第一步。