您的位置:首页 > 运维架构

在.NET中实现窗体控件的内容拖拽效果(Drag-and-Drop)

2010-01-05 09:09 1276 查看
很早以前的Windows版本中,微软就实现了界面控件的内容拖拽效果支持机制(应该是在OLE1.0中就实现了这种效果),但缺省的情况,Windows界面控件并不支持内容拖拽操作,需要我们做一些“简单”的工作。本文就通过一个实例来演示在.net中怎样实现界面控件的内容拖拽效果。 在Windows应用程序项目中添加如下Form:



我们在该窗体中的ListBox控件中实现“内容拖出”效果(控件命名为lstDrag),在TreeView控件中实现“内容拖入”效果(控件命名为tvDrop)。为了让tvDrop控件支持内容拖入,我们需要将其AllowDrop属性设为“True”,如下图:



1: private void FormMain_Load(object sender, EventArgs e)

2: {
3: this.lstDrag.MouseDown += new MouseEventHandler(lstDrag_MouseDown);
4: this.tvDrop.DragEnter += new DragEventHandler(tvDrop_DragEnter);
5: this.tvDrop.DragDrop += new DragEventHandler(tvDrop_DragDrop);
6: }
也就是为lstDrag的MouseDown事件、tvDrop的DragEnter事件和DragDrop事件添加相应的事件处理方法,方法代码如下:
lstDrag的MouseDown事件处理方法
1: void lstDrag_MouseDown(object sender, MouseEventArgs e)
2: {
3: if (this.lstDrag.SelectedItem != null)
4: {
5: this.lstDrag.DoDragDrop(this.lstDrag.SelectedItem, DragDropEffects.Copy);
6: }
7: }
tvDrop的DragEnter事件处理方法
1: void tvDrop_DragEnter(object sender, DragEventArgs e)
2: {
3: e.Effect = DragDropEffects.Copy;
4: }
DragDropEffects枚举的各个值的意义如下:
成员名称说明
None放置目标不接受该数据。
Copy将数据复制到放置目标。
Move将拖动源的数据移动到放置目标。
Link将拖动源中的数据链接到放置目标。
Scroll即将在放置目标中开始滚动,或当前正在滚动。
All从拖动源复制、移除数据,并将其滚动到放置目标中。
tvDrop的DragDrop事件处理方法
1: void tvDrop_DragDrop(object sender, DragEventArgs e)
2: {
3: string item = (string)e.Data.GetData(e.Data.GetFormats()[0]);
4: TreeNode tvNode = new TreeNode(item);
5: tvNode.ToolTipText = "被拉过来的内容";
6:
7: if (this.tvDrop.SelectedNode == null)
8: {
9: //如果没有选中节点,将拖入的内容添加到树的根节点下
10: this.tvDrop.Nodes.Add(tvNode);
11: }
12: else
13: {
14: //如果选中了节点,将拖入的内容添加到选中的的节点下
15: this.tvDrop.SelectedNode.Nodes.Add(tvNode);
16: //展开树节点
17: this.tvDrop.SelectedNode.Expand();
18: }
19: }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: