1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
public class TreeviewDropHoverExtend : TreeView
{
private DateTime _lastDragDestinationTime;
protected TreeNode LastDragDestination;
protected TreeNode NodeInMove;
[Category("DragDrop"), Description("Defini si le noeud doit être etend au survol lors d'un drag and drop")]
public bool ExpendOnDropHover { get; set; } = true;
[Category("DragDrop"), Description("Défini le temps en milliseconde après lequel le noeud est étendu lors d'un drag ands drop")]
public int TimeNodeHover { get; set; } = 1000;
public TreeviewDropHoverExtend() : base()
{ }
/// <summary>
/// Vérifie si un noeud en contient un autre au dela d'un lien parent
/// L'ordre des noeuds n'a pas d'importance car il sont réorganisé
/// </summary>
/// <param name="node1"> noeud 1 </param>
/// <param name="node2"> noeud 2</param>
/// <returns>true si le noeud contient l'autre</returns>
public bool IsUnderOf /*ContainsNode*/(TreeNode node1, TreeNode node2)
{
if( node1.Level < node2.Level) {
TreeNode temp = node1;
node1 = node2;
node2 = temp;
}
if (node2.Parent == null) return false;
if (node2.Parent.Equals(node1)) return true;
return IsUnderOf(node1, node2.Parent);
}
/// <summary>
/// Etend le noeud au survol
/// </summary>
/// <param name="tn">Noeud survolé</param>
protected void ExpandNodeOnHover(TreeNode tn)
{
if( !ExpendOnDropHover )
return;
if (tn != LastDragDestination)
{
LastDragDestination = tn;
_lastDragDestinationTime = DateTime.Now;
}
else
{
TimeSpan hoverTime = DateTime.Now.Subtract(_lastDragDestinationTime);
if (hoverTime.TotalMilliseconds > TimeNodeHover)
tn.Expand();
}
}
} |
Partager