Capturar un clic en el icono de un TreeNode

2158 vistas

Vamos a usar un TreeView (TreeView1) que tiene un ImageList asociado para sus TreeNodes.
Capturaremos el evento TreeView.MouseDown para recuperar las coordenadas del puntero del ratón.
El siguiente método (GetNodeIconeRectangle) permite calcular el Rectangle del icono del TreeNode seleccionado. Ahora sólo quedará mirar si el Point del puntero del ratón está en el icono del TreeNode seleccionado.



csharp
  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4.  
  5. private void TreeView1_MouseDown(object sender, MouseEventArgs e)
  6. {
  7.     Point p = new Point(e.X, e.Y);
  8.     TreeNode selectedTreeNode = this.TreeView1.GetNodeAt(p);
  9.     Rectangle imgRectangle;
  10.     if (selectedTreeNode !=null)
  11.     {
  12.       imgRectangle = GetNodeIconeRectangle(selectedTreeNode)
  13.       if (imgRectangle.Contains(p))
  14.         {
  15.             // tratamiento
  16.         }
  17.     }
  18. }
  19.  
  20. private Rectangle GetNodeIconeRectangle(TreeNode node)
  21. {
  22.     Size s = node.TreeView.ImageList.ImageSize;
  23.     int h = node.TreeView.ItemHeight;
  24.     int x = node.Bounds.X - s.Width;
  25.     int y = node.Bounds.Y + ((h - s.Height)/2);
  26.     return new Rectangle(new Point(x, y), s);
  27. }