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
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |