Utilisation des délégates
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:
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:
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 :
- 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