Bonjour/bonsoir à tous,

je continue mon apprentissage de C# et je viens de découvrir les delegate qui conviendrait, à mon avis, à une utilisation pour un draganddrop sur un treeview depuis plusieures source. J'ai donc implémenter celà

La partie dragdrop du treeview
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
		private void trv_DragDrop(object sender, DragEventArgs e)
		{
			if( e.Data == null ) return;
 
			TreeNode targetNode = trv.GetNodeAt( trv.PointToClient(new Point(e.X, e.Y)) );
			if(targetNode == null ) return;
 
			e.Effect = ( e.KeyState == 4 )? DragDropEffects.Copy : DragDropEffects.Move;
 
                       DelDropProcessing delDataProcessing = dataDropedOnTreeview.GetDelegate( e.Data );
                      delDataProcessing( targetNode, _nodeToMove, e.Effect, e.Data );
 
			targetNode.Expand();
		}
La class de traitement des données
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
        public delegate void DelDropProcessing(TreeNode destinationNode, TreeNode nodeToMove,  DragDropEffects effect, IDataObject data);
 
	public static class dataDropedOnTreeview 
	{
 
        public static DelDropProcessing GetDelegate(IDataObject data)
	{
		if( data.GetDataPresent(typeof(TreeNode)) )
                          return new DelDropProcessing( TreeNodeData );
 
		if( data.GetDataPresent(typeof(ListViewItem)))
                         return new DelDropProcessing( ListViewData );
 
            return new DelDropProcessing( NoDataReader );
        }
 
        public static void NoDataReader( TreeNode destinationNode, TreeNode nodeToMove, DragDropEffects effect, IDataObject data )
        {
			//Ne fait rien car pas un type de données connu
	}
 
        public static void TreeNodeData ( TreeNode destinationNode, TreeNode nodeToMove, DragDropEffects effect, IDataObject data )
	{
			//traitement des données
	}
 
	public static void ListViewData ( TreeNode destinationNode, TreeNode nodeToMove, DragDropEffects effect, IDataObject data )
	{
			//traitement des données
	}
}
J'aurais donc souhaiter savoir :
  1. Est-ce l'utilisation correct des delegate?
  2. Est-ce bien le type de situation pour l'utilisation des delegate
  3. Je ne vois pas en quoi les delegate simplifie le code puisque je me retrouve quand même à devoir fair des if repetitif ou un switch case pour definir le delegate à utiliser et donc je pourrais faire celà avec de simple fonction
  4. Avez vous des remarques sur le bout de code ou toute autre conseil à me fournir


Je vous remercie d'avance