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
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 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(); }
J'aurais donc souhaiter savoir :
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 } }
- Est-ce l'utilisation correct des delegate?
- Est-ce bien le type de situation pour l'utilisation des delegate
- 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
- Avez vous des remarques sur le bout de code ou toute autre conseil à me fournir
Je vous remercie d'avance
Partager