pratique : Etendre un control ou class qui le gère
Bonjour à tous,
Je viens de me créer un petit treeview etendu pour la gestion du drag and drop et je viens de me rendre compte que je pourrais gérer cela par un class qui prend en propriété un treeview qui ajoute les fonction en s'abonnant au evenement du treeview.
D'un point de vue pratique vaut-il mieux étendre un control ou crer une class de gestion du control?
voici le code du treeview étendu
Code:
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();
}
}
} |
Merci