73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.ComponentModel;
 | |
| using System.Data;
 | |
| using System.Text;
 | |
| using System.Windows.Forms;
 | |
| using VEPROMS.CSLA.Library;
 | |
| 
 | |
| namespace Volian.Controls.Library
 | |
| {
 | |
| 	//public delegate void vlnTreeViewEvent(object sender, vlnTreeEventArgs args);
 | |
| 	//public delegate bool vlnTreeViewBoolEvent(object sender, vlnTreeEventArgs args);
 | |
| 	//public delegate TreeNode vlnTreeViewTreeNodeEvent(object sender, vlnTreeEventArgs args);
 | |
| 	//public delegate void vlnTreeViewDDEvent(object sender, System.Windows.Forms.DragEventArgs args);
 | |
| 	public partial class vlnTreeView3 : TreeView
 | |
| 	{
 | |
| 		private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | |
| 		#region Events
 | |
| 		public event vlnTreeViewEvent NodeSelectionChange;
 | |
| 		private void OnNodeSelectionChange(object sender, vlnTreeEventArgs args)
 | |
| 		{
 | |
| 			if (NodeSelectionChange != null) NodeSelectionChange(sender, args);
 | |
| 		}
 | |
| 		#endregion
 | |
| 		#region Business Methods
 | |
| 		#endregion
 | |
| 		#region Constructors
 | |
| 		public vlnTreeView3()
 | |
| 		{
 | |
| 			InitializeComponent();
 | |
| 			base.AfterSelect += new TreeViewEventHandler(tv_AfterSelect);
 | |
| 		}
 | |
| 		private void tv_AfterSelect(object sender, TreeViewEventArgs e)
 | |
| 		{
 | |
| 			OnNodeSelectionChange(sender, new vlnTreeEventArgs(e.Node));
 | |
| 		}
 | |
| 		#endregion
 | |
| 		private static TreeNode GetTreeNodeFromData(IDataObject datobj)
 | |
| 		{
 | |
| 			foreach (string s in datobj.GetFormats())
 | |
| 			{
 | |
| 				try
 | |
| 				{
 | |
| 					return (TreeNode)datobj.GetData(s);
 | |
| 				}
 | |
| 				catch (Exception ex)
 | |
| 				{
 | |
| 					if (_MyLog.IsErrorEnabled) _MyLog.Error("GetTreeNodeFromData", ex);
 | |
| 				}
 | |
| 			}
 | |
| 			return null;
 | |
| 		}
 | |
| 		private TreeNode Clone(TreeNode tn)
 | |
| 		{
 | |
| 
 | |
| 			TreeNode tmp = (TreeNode)tn.Clone();
 | |
| 			ExpandMatch(tmp, tn);
 | |
| 			return tmp;
 | |
| 		}
 | |
| 		private void ExpandMatch(TreeNode tn1, TreeNode tn2)
 | |
| 		{
 | |
| 			if (tn2.IsExpanded) tn1.Expand();
 | |
| 			foreach (TreeNode tc in tn2.Nodes) ExpandMatch(tn1.Nodes[tc.Index], tc);
 | |
| 		}
 | |
| 		private bool IsChild(TreeNode parent, TreeNode child)
 | |
| 		{
 | |
| 			if (parent.Equals(child)) return true;// Check against self
 | |
| 			foreach (TreeNode tc in parent.Nodes) if (IsChild(tc, child)) return true;//Check all children
 | |
| 			return false;// Must not be a child at this level
 | |
| 		}
 | |
| 	}
 | |
| }
 |