将元素拖放到新区域

时间:2013-02-11 16:44:27

标签: .net drag-and-drop webforms

我正在开展一个爱好项目,以加强我的应用程序开发技能。有一件特别的东西给了我一些麻烦。

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

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

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

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

我还想允许用户在属性分数之间拖放值,但是从第一部分的答案中可以很容易地遵循。

简而言之,如何让用户将控件的值拖动到应用程序中的另一个控件

1 个答案:

答案 0 :(得分: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'访问移动的数据 - 这将返回一个可转换的对象。

这并不能解决我的一些问题(特别是鼠标没有携带数据的'阴影'),但这是一个很好的第一步。