2008-09-24 23 views
5

Tiene un problema al obtener un control TreeView para mostrar imágenes de nodo. El siguiente código funciona a veces pero no muestra ninguna imagen en otros momentos..NET TreeView no mostrará imágenes


private TreeNode AddNodeForCore(TreeNode root, Core c) { 
    string key = GetImageKey(c); 
    TreeNode t = root.Nodes.Add(c.Name, c.Name, key, key); 
    t.Tag = c; 
    return t; 
} 

Tenga en cuenta que cuando falla, el TreeView no puede mostrar ninguna imagen para ningún nodo. El TreeView tiene una ImageList asignada, y la clave de la imagen está definitivamente en la colección de imágenes.

Editar:
Mi google-fu es débil. No puedo creer que no haya encontrado esa respuesta yo mismo.

Respuesta

8

El bit útil de los puestos en Google anteriores es de hecho:.

"Este es un fallo conocido en el Windows XP implementación estilos visuales ciertos controles, como ImageList, no quedar debidamente inicializado cuando están Se ha creado antes de que la aplicación llame a Application.EnableVisualStyles(). La implementación Main() normal en un C.Programa.cs lo evita. Gracias por publicar de nuevo! "

Básicamente, asegúrese de que se llame a Application.EnableVisualStyles() antes de inicializar su lista de imágenes.

+0

Ah, tienes razón. Este es de hecho el hecho más interesante. – VVS

2

Una rápida búsqueda en Google considera esta respuesta: http://forums.microsoft.com/MSDN/ShowPost.aspx?siteid=1&PostID=965968

Cita de esa página:

Si el formulario que contiene el TreeView se crea una instancia de la función de complemento en el arranque como abajo, los iconos ¡Aparecer!

public partial class ThisApplication 
{ 
    Form1 frm; 

    private void ThisApplication_Startup(object sender, System.EventArgs e) 
    { 
     frm = new Form1(); 
     frm.Show(); 

    } 

PERO, si una instancia con la clase, de la siguiente manera:

public partial class ThisApplication 
{ 
    Form1 frm = new Form1(); 


    private void ThisApplication_Startup(object sender, System.EventArgs e) 
    { 
        frm.Show(); 

    } 

Entonces no aparecen. Además, si "VisualStyles" (nuevo con XP) están deshabilitados, los iconos funcionan en ambas instancias.

1

De acuerdo con [la sección método Add] (http://msdn.microsoft.com/en-us/library/ydx6whxs(VS.80).aspx) en la biblioteca de MSDN, es necesario rellenar tanto TreeView.ImageList y TreeView.SelectedImageList desde el cuarto argumentos se refiere a la segunda lista.

Si este error ocurre cuando se selecciona un nodo, entonces no busque más.

0

La solución publicado por Youssarian ni los "Application.DoEvents de llamada() entre Application.EnableVisualStyles() y Application.Run()" populares trabajado para mí.

Después de mucho agitando, rechinando de dientes y Google, la solución publicada por Addy Santo hizo el truco.

Cuestiones relacionadas