2009-11-01 18 views

Respuesta

11

Es necesario que ajuste tanto el ImageIndex y la SelectedImageIndex en el nodo del árbol.

9

'intención de SelectedImageIndex es permitir visualizar una imagen diferente de la selección de la que es fijado por el 'ImageIndex' para un nodo en particular. Para mantener estos dos valores consistentes, es necesario establecerlos en el mismo valor. Esto se puede hacer en tiempo de diseño o programáticamente según sus necesidades.

Por ejemplo, si las imágenes nunca cambian, entonces es tan simple como la que fueron al mismo tiempo cuando se añade un nuevo nodo al TreeView:

int myCurrentImageIndex = 0; 
TreeNode node = myTreeView.Nodes.Add("new node!"); 
node.ImageIndex = node.SelectedImageIndex = myCurrentImageIndex; 

Sin embargo, si cambia el valor de ImageIndex por cualquier razón después de su creación inicial (como una respuesta a algún tipo de acción del usuario), también debe cambiar SelectedImageIndex también. De lo contrario, se volverán inconsistentes.

int myNewImageIndex = 1; 
node.ImageIndex = node.SelectedImageIndex = myNewImageIndex; 

(Nota no es suficiente para ponerlos a ser el mismo en el controlador de eventos del evento 'AfterSelect'. Debe hacerse cualquier parte del código donde los cambios ImageIndex.)

+0

Si está haciendo una aplicación que presenta su estructura como una carpeta, sus usuarios apreciarán tener el cambio en la imagen cuando hayan seleccionado una "carpeta". Solo asegúrate de que el cambio no sea demasiado chillón o sutil. –

+0

Ok, tengo la misma situación. Pero, ¿cómo puedo detener completamente este comportamiento? Todos mis nodos se crean durante el tiempo de ejecución. ¿Seguir el evento AfterSelect me dará una forma de detener esto? –

+1

Tuve la situación exacta también. Lo que hice fue crear un diccionario estático para albergar las imágenes con un índice asociado porque no era capaz de determinar el índice de la lista de imágenes en tiempo de ejecución, ya que se añadieron de forma dinámica. Así que he usado algo como: Diccionario de sólo lectura estática pública TREEVIEW_ICONS = nuevo Diccionario (); y lo mantuvo en agregar. La cadena en el diccionario era el único nombre de archivo de la imagen y el int. Era mi forma de rastrear el índice. Es decir. TREEVIEW_ICONS.Add (iconFileName, TREEVIEW_ICONS.Count) –

1

que pueda directamente hacerlo en el constructor:

TreeNode node = new TreeNode("My treenode", 1, 1); 
Cuestiones relacionadas