c# - tutorial - .NET TreeView no mostrará imágenes
winforms c# (4)
Tener 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.
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, TreeView no puede mostrar ninguna imagen para ningún nodo. El TreeView tiene una ImageList asignada, y la clave de la imagen definitivamente está 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.
La solución publicada por Yossarian ni el popular "Call Application.DoEvents () entre Application.EnableVisualStyles () y Application.Run ()" funcionó para mí.
Después de mucho agitarse, rechinar de dientes y buscar en Google, la solución publicada por Addy Santo hizo el truco.
De acuerdo con [la sección Agregar método] ( http://msdn.microsoft.com/en-us/library/ydx6whxs(VS.80).aspx) en la biblioteca de MSDN, debe llenar tanto TreeView.ImageList
como TreeView.SelectedImageList
ya que el cuarto argumento se refiere a la segunda lista.
Si este error ocurre cuando seleccionas un nodo, entonces no busques más.
La parte útil de las publicaciones en Google de arriba es de hecho:
"Este es un error conocido en la implementación de estilos visuales de Windows XP. Ciertos controles, como ImageList, no se inicializan correctamente cuando se han creado antes de que la aplicación llame a Application.EnableVisualStyles (). La implementación Main () normal en un C # ''s Program.cs lo evita. Gracias por publicar de nuevo! "
Básicamente, garantice que se llama a Application.EnableVisualStyles () antes de inicializar su lista de imágenes.
Una búsqueda rápida en Google encontró 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 en la función de inicio de complemento como se muestra a continuación, ¡aparecerán los íconos!
public partial class ThisApplication
{
Form1 frm;
private void ThisApplication_Startup(object sender, System.EventArgs e)
{
frm = new Form1();
frm.Show();
}
PERO, si se crea una instancia con la clase, como a continuación:
public partial class ThisApplication
{
Form1 frm = new Form1();
private void ThisApplication_Startup(object sender, System.EventArgs e)
{
frm.Show();
}
Entonces ellos NO aparecen. Además, si "VisualStyles" (nuevo con XP) están deshabilitados, los iconos funcionan en ambas instancias.