obtener - treeview c# ejemplos
¿Cómo configuro una imagen para algunos nodos en un TreeView? (6)
Intenté esto una vez y no creo que sea posible.
Si intenta establecer tanto ImageKey
como ImageIndex
en ImageIndex
"no establecidos", el control simplemente establece ImageIndex
en 0. El siguiente código:
treeView.ImageKey = "Value";
Debug.WriteLine(treeView.ImageIndex);
treeView.ImageKey = null;
Debug.WriteLine(treeView.ImageIndex);
treeView.ImageIndex = -1;
Debug.WriteLine(treeView.ImageIndex);
Produce salida:
-1
0
0
Este tipo de información le dice que los desarrolladores de control querían asegurarse de que siempre haya una imagen predeterminada. Eso me deja con las opciones de pirateo, me temo.
Tengo un control de formularios Windows TreeView
con una ImageList
, y quiero que algunos de los nodos muestren imágenes, pero los demás no tienen imágenes.
No quiero un espacio en blanco donde debería estar la imagen. No quiero una imagen que se parezca a las líneas que dibujaría TreeView si no tuviera una ImageList. ¿Cómo hago para dibujar imágenes de algunos elementos y no de otros, sin recurrir a hackers torpes como ese?
Lo que he elegido hacer es usar una imagen de puntos para esos nodos TreeView
que no se supone que tienen una imagen.
Agrego esta imagen como la última imagen en la lista, y si no se supone que el elemento tenga una imagen, lo configuré en ImageList.Images.Count-1
ImageIndex
establecer ImageIndex
y SelectedImageIndex
en un número que sea más alto que el número de valores en su ImageList
. Por ejemplo, si crea este nodo y lo agrega a su TreeView
:
TreeNode node1 = new TreeNode(string.Empty, 12, 12); // imageList1.Count = 5
TreeNode
un TreeNode
invisible insertado en tu TreeView
. Cambié el color de fondo de mi TreeView
y todavía era invisible.
(Busqué en Google esto por algún tiempo, y finalmente encontré la respuesta aquí: http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.windowsforms/2006-09/msg00322.html )
Esto dibujará el texto TreeNode
donde debería haber estado la imagen, TreeNode
el espacio en blanco.
Deberá establecer la propiedad DrawMode
TreeView
en OwnerDrawText
. Puede encontrar la propiedad DrawMode
en el panel de propiedades.
Luego, cuando agrega un nodo, configure su ImageIndex
y SelectedImageIndex
mayores que el valor de su valor de yourImageListName.Images.Count
. Esto es para que no se dibuje ninguna imagen, pero aún habrá espacio en blanco que no desea.
Ahora para deshacerte del espacio en blanco. Agregue un controlador para el evento DrawNode de DrawNode
. Para ello, vaya al panel de propiedades de TreeView y haga clic en el icono del panel que se parece a un perno de iluminación, luego desplácese hasta que vea el texto DrawNode
y haga doble clic en él.
Ahora solo copie y pegue esto en el método creado
if (e.Node.ImageIndex >= e.Node.TreeView.ImageList.Images.Count) // if there is no image
{
int imagewidths = e.Node.TreeView.ImageList.ImageSize.Width;
int textheight = TextRenderer.MeasureText(e.Node.Text, e.Node.NodeFont).Height;
int x = e.Node.Bounds.Left - 3 - imagewidths / 2;
int y = (e.Bounds.Top + e.Bounds.Bottom) / 2+1;
Point point = new Point(x - imagewidths/2, y - textheight/2); // the new location for the text to be drawn
TextRenderer.DrawText(e.Graphics, e.Node.Text, e.Node.NodeFont, point, e.Node.ForeColor);
}
else // drawn at the default location
TextRenderer.DrawText(e.Graphics, e.Node.Text, e.Node.TreeView.Font, e.Bounds, e.Node.ForeColor);
Hei hermano, encontré la manera. Establezca la primera imagen como una imagen vacía, como esta ...
TreeView treeView = new TreeView();
treeView.ImageList.Images.Add(new Bitmap(1,1));
Entonces, el índice 0 es una imagen vacía. espero que esto ayude
Descubrí que usar StateImageList en TreeView en lugar de ImageList solo mostrará la imagen cuando StateImageIndex en TreeNode sea igual o mayor que 0