2008-09-24 7 views
5

Problème lors de l'obtention d'un contrôle TreeView pour afficher des images de noeud. Le code ci-dessous fonctionne parfois mais ne montre aucune image à d'autres moments..NET TreeView n'affichera pas les images


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; 
} 

Notez qu'en cas d'échec, TreeView ne peut afficher aucune image pour aucun noeud. Le TreeView a une ImageList qui lui est assignée, et la clé de l'image est définitivement dans la collection d'images.

Éditer:
Mon google-fu est faible. Je ne peux pas croire que je n'ai pas trouvé cette réponse moi-même.

Répondre

8

Le bit utile des messages de Googled ci-dessus est en fait:.

« Ceci est un bogue connu dans la mise en œuvre des styles visuels Windows XP Certains contrôles, comme ImageList, ne soyez pas correctement initialisé quand ils a été créé avant que l'application appelle Application.EnableVisualStyles(). L'implémentation Main() normale dans Program.cs d'un C# évite cela.

Donc, fondamentalement, assurez-vous que Application.EnableVisualStyles() est appelée avant d'initialiser votre liste d'images.

+0

Ah, vous avez raison. C'est en effet le fait le plus intéressant. – VVS

2

Une recherche rapide Google a trouvé cette réponse: http://forums.microsoft.com/MSDN/ShowPost.aspx?siteid=1&PostID=965968

Citation de cette page:

Si le formulaire contenant le TreeView est instancié dans la fonction complémentaire dans le démarrage comme ci-dessous, les icônes apparaître!

public partial class ThisApplication 
{ 
    Form1 frm; 

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

    } 

MAIS, si instancié avec la classe, comme ci-dessous:

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


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

    } 

Ensuite, ils apparaissent. De plus, si "VisualStyles" (nouveau avec XP) est désactivé, les icônes fonctionnent dans les deux cas.

1

Selon [la section méthode Add] (http://msdn.microsoft.com/en-us/library/ydx6whxs(VS.80).aspx) dans la bibliothèque MSDN, vous devez remplir les deux TreeView.ImageList et TreeView.SelectedImageList depuis le quatrième arguments se réfère à la deuxième liste.

Si ce bug se produit lorsque vous sélectionnez un nœud, alors ne cherchez pas plus loin.

0

La solution publié par Yossarian ni les "Application.DoEvents d'appel() entre Application.EnableVisualStyles() et Application.Run()" populaire a fonctionné pour moi.

Après beaucoup de mouvements désordonnés, grincements de dents, et Googling, la solution postée par Addy Santo a fait l'affaire.

Questions connexes