实现了拖放操作处理,并且每一个结点的添加和移除都能引发事件的TreeView

///如未特别说明,本人所发表的技术文章都为原创, 任何人引用都请注明出处,并包含本声明
///作者: CSDN网名alias88,邮件: _[email protected] ,QQ:63343
_

__

using

System;

using System.ComponentModel;

using System.Collections;

using System.Diagnostics;

using System.Drawing;

using System.Windows.Forms;

using System.Data;

namespace upLibrary.upControls

{

///

1<summary>
2
3///  实现了拖放操作处理,并且每一个结点的添加和移除都能引发事件的TreeView。 
4
5///  </summary>

public class upTreeViewBase : System.Windows.Forms.TreeView

{

private System.ComponentModel.Container components = null ;

private TreeNode _DragNode;

private bool _MoveNode= false ;

private bool _CopyNode= false ;

private bool _CanDropDrag= false ;

///

1<summary>
2
3///  删除节点事件句柄(sender 是父结点或为空,e.Node是子结点) 
4
5///  </summary>

public delegate void NodeDeleteHandler ( object Sender,upLibrary.upControls.TreeNodeEventArgs e);

///

1<summary>
2
3///  增加节点事件句柄(sender 是父结点或为空,e.Node是子结点) 
4
5///  </summary>

public delegate void NodeAddHandler ( object Sender,upLibrary.upControls.TreeNodeEventArgs e);

///

1<summary>
2
3///  在删除或增加节点之间浏览子节点事件句柄(sender 是父结点或为空,e.Node是子结点) 
4
5///  </summary>

public delegate void BrowseTreeNodesEventHandler ( object Sender,TreeNodeEventArgs e);

///

1<summary>
2
3///  在拖放操作中改变父结点事件句柄(sender 是父结点或为空,e.Node是子结点) 
4
5///  </summary>

public delegate void ParentChangByDrapDropHandler ( object Sender,TreeNodeEventArgs e);

[Description("在拖放操作中改变结点的父之前发生此事件") ]

public event ParentChangByDrapDropHandler ParentChangingByDrapDrop;

[Description("在拖放操作中改变了结点的父之后发生此事件") ]

public event ParentChangByDrapDropHandler ParentChangedByDrapDrop;

[Description("sender所代表的节点将被移除,通常在移动拖放操作之前后发生,或树已加载后再移除之前发生") ]

public event NodeDeleteHandler NodeDeleting;

[Description("sender所代表的节点将被添加,通常在移动或复制拖放操作完成后发生,或树已加载后再新增之前发生") ]

public event NodeAddHandler NodeAdding;

[Description("sender所代表的节点被移除,通常在移动拖放操作完成后发生,或树已加载后再移除节点后发生") ]

public event NodeDeleteHandler NodeDeleted;

[Description("sender所代表的节点被添加,通常在移动或复制拖放操作完成后发生,或树已加载后再新增节点后发生") ]

public event NodeAddHandler NodeAdded;

[Description("当调用BrowseNodes时从最低层开始遍历到指定node时发生此事件") ]

public event BrowseTreeNodesEventHandler InverseBrowseTreeNodes;

[Description("向下遍历到指定node时发生此事件") ]

public event BrowseTreeNodesEventHandler DownBrowseTreeNodes;

public upTreeViewBase()

{

InitializeComponent();

}

///

1<summary>
2
3///  清理所有正在使用的资源。 
4
5///  </summary>

protected override void Dispose( bool disposing )

{

if ( disposing )

{

if (components != null )

{

components.Dispose();

}

}

base .Dispose( disposing );

}

#region 组件设计器生成的代码

///

1<summary>
2
3///  设计器支持所需的方法 - 不要使用代码编辑器修改 
4
5///  此方法的内容。 
6
7///  </summary>

private void InitializeComponent()

{

components = new System.ComponentModel.Container();

}

#endregion

#region "拖放相关"

///

1<summary>
2
3///  是否移动型拖放 
4
5///  </summary>

public bool CanMoveNode

{

get { return _MoveNode;}

set

{

this .ItemDrag -= new System.Windows.Forms.ItemDragEventHandler(TreeView_ItemDrag);

this .DragEnter -= new System.Windows.Forms.DragEventHandler(TreeView_DragEnter);

this .DragDrop -= new System.Windows.Forms.DragEventHandler(TreeView_DragDrop);

_MoveNode= value ;

if (_MoveNode)

{

this .ItemDrag += new System.Windows.Forms.ItemDragEventHandler(TreeView_ItemDrag);

this .DragEnter += new System.Windows.Forms.DragEventHandler(TreeView_DragEnter);

this .DragDrop += new System.Windows.Forms.DragEventHandler(TreeView_DragDrop);

}

}

}

///

1<summary>
2
3///  是否复制型拖放 
4
5///  </summary>

public bool CanCopyNode

{

get { return _CopyNode;}

set

{

this .ItemDrag -= new System.Windows.Forms.ItemDragEventHandler(TreeView_ItemDrag);

this .DragEnter -= new System.Windows.Forms.DragEventHandler(TreeView_DragEnter);

this .DragDrop -= new System.Windows.Forms.DragEventHandler(TreeView_DragDrop);

_CopyNode= value ;

if (_CopyNode)

{

this .ItemDrag += new System.Windows.Forms.ItemDragEventHandler(TreeView_ItemDrag);

this .DragEnter += new System.Windows.Forms.DragEventHandler(TreeView_DragEnter);

this .DragDrop += new System.Windows.Forms.DragEventHandler(TreeView_DragDrop);

}

}

}

///

1<summary>
2
3///  开始拖放 
4
5///  </summary>

///

1<param name="sender"/>

///

1<param name="e"/>

protected void TreeView_ItemDrag( object sender, System.Windows.Forms.ItemDragEventArgs e)

{

this ._DragNode = (TreeNode)e.Item;

string strItem = e.Item.ToString();

if (_CopyNode && _MoveNode)

DoDragDrop(strItem, DragDropEffects.Move | DragDropEffects.Copy );

else if (_CopyNode)

DoDragDrop(strItem, DragDropEffects.Copy );

else if (_MoveNode)

DoDragDrop(strItem, DragDropEffects.Move );

}

///

1<summary>
2
3///  拖入到控件边界内时 
4
5///  </summary>

<SPAN style="COLOR: gray"

Published At
Categories with Web编程
Tagged with
comments powered by Disqus