[C#]pb avec icone de mon treeview

leneutrino
[C#]pb avec icone de mon treeview

salut à tous !
j'ai un treevieew sur lequel je spécifie une icone pour les noeuds parent et une autre pour les enfants. MAis le pb est que sur clic d'un enfant l'icone change et devient celle du parent. je ne comprends pas . qu'elqu'un pourrait il m'aider ?

voici mon code :

private void AddDirectoryAndNode(TreeNode ParentNode, string DirectoryPath)
 {
     // Create the ContextMenuStrip.
     ContextMenuStrip docMenu;

     docMenu = new ContextMenuStrip();

     //Create some menu items.
     ToolStripMenuItem deleteLabel = new ToolStripMenuItem();
     deleteLabel.Text = "Supprimer";
     ToolStripMenuItem renameLabel = new ToolStripMenuItem();
     renameLabel.Text = "Renommer";

     //Add the menu items to the menu.
     docMenu.Items.AddRange(new ToolStripMenuItem[]{deleteLabel, renameLabel});
     string[] directories = Directory.GetDirectories(DirectoryPath);
     foreach (string childDirectoryPath in directories)
     {
         TreeNode childNode = new TreeNode(childDirectoryPath.Substring(18));
//         childNode.ImageIndex=0;
         ParentNode.Nodes.Add(childNode);
         childNode.ImageIndex = 0;
         childNode.ContextMenuStrip = docMenu;
         AddFilesToNode(childNode, childDirectoryPath);
     }
 }

private void AddFilesToNode(TreeNode ParentNode, string FilePath)
        {
            // Create the ContextMenuStrip.
            ContextMenuStrip docMenu;

            docMenu = new ContextMenuStrip();

            //Create some menu items.
            ToolStripMenuItem openLabel = new ToolStripMenuItem();
            openLabel.Text = "Charger";
            ToolStripMenuItem deleteLabel = new ToolStripMenuItem();
            deleteLabel.Text = "Supprimer";
            ToolStripMenuItem renameLabel = new ToolStripMenuItem();
            renameLabel.Text = "Renommer";

            //Add the menu items to the menu.
            docMenu.Items.AddRange(new ToolStripMenuItem[]{openLabel, 
        deleteLabel, renameLabel});
            string[] files = Directory.GetFiles(FilePath);
            foreach (string childfile in files)
            {
                TreeNode childNode = new TreeNode(childfile.Substring(30));
        
                childNode.ContextMenuStrip = docMenu;
                                ParentNode.Nodes.Add(childNode);
                                childNode.ImageIndex = 1;
               
            }
        }

         /******************************************/
        public void addImage()
        {
            // Be sure that you use an appropriate escape sequence (such as the 
            // @) when specifying the location of the file.
            System.Drawing.Image myImageFolder =
              Image.FromFile("D:\\Les images\\folder.ico");
            imageList1.Images.Add(myImageFolder);

            System.Drawing.Image myImageFile =
              Image.FromFile("D:\\Les images\\text.ico");
            imageList1.Images.Add(myImageFile);

        }

l'appelle du code se passe comme ceci :

private void Form1_Load(object sender, EventArgs e)
        {            
            // Set the ContextMenuStrip property to the ContextMenuStrip.
            
          
            TreeNode initialNode;
            string initialDirectory = @"D:\RepertoireScan";

            initialNode = new TreeNode(initialDirectory);
            treeView1.Nodes.Add(initialNode);

            AddDirectoryAndNode(initialNode, initialDirectory);
                        addImage();
                        treeView1.ImageList = imageList1;             
 }
fredericmazue

Quote:

voici mon code :

Ton code ?
Hum.... C'est curieux, mais je jurerais que c'est le code de quelqu'un d'autre que tu essaies d'adapter. Est-ce que je me trompe ?
Tu as déjà posé une question sur le TreeView hier. Et sans remercier, tu en pose une autre, induite (il me semble) parce que tu ne comprends pas bien le code que tu nous montres. Je trouve ça dommage et ça ne donne pas très envie de t'aider plus.

Pour ton problème, l'attribution ne semble pas bien suivre l'arborescence que tu veux montrer, alors ça parait assez normal que les images ne correspondent pas.

leneutrino

Quote:
Tu as déjà posé une question sur le TreeView hier. Et sans remercier, tu en pose une autre

escuse moi Fred ,j'avais pas eu de notification de reponse et je viens de configurer mon profil .je profite pour te remercier en même temps.
Quote:
Ton code ?
Hum.... C'est curieux, mais je jurerais que c'est le code de quelqu'un d'autre que tu essaies d'adapter. Est-ce que je me trompe ?

t'aurais souhaité que j'ecrive quoi ? j'ai juste cherché dans MSDN et j'ai trouvé pour l'affectation d'icone.Mais le pb survient lorsqu'il y'a click sur un oeud fils alors l'icone change !
si tu peux encore m'aider.Te fache surtout pas !
Merci d'avance
fredericmazue

Quote:

t'aurais souhaité que j'ecrive quoi ?

Moi je ne souhaite rien. :)
Mais je pense que pour bien apprendre, il faut éviter les copier-coller et écrire tout soit même. C'est sûr que c'est moins facile au début, que ça demande du boulot, mais c'est beaucoup plus profitable au final.

Quote:

Te fache surtout pas !

Je ne suis pas fâché. Ce n'est pas parce que je dis ce que je pense que je suis fâché ;)

Pour ton problème, il me semble que les images ne sont pas affectées correctement selon la nature du noeud. Je veux dire: cette image ci pour un répertoire, cette image là pour un fichier. Du coup tu as le comportement que tu décris.

Il me semble, si je comprends bien ton code, que tu ne traites pas l'arborescence dans toute sa profondeur. Tu pars de la racine. Tu regardes les sous répertoires (au passage sans regarder les simples fichiers) et tu affectes une image puis dans les sous répertoires tu regardes les simples fichiers et tu affectes une image, sans tenir comte du fait que les répertoires peuvent contenir eux-mêmes des répertoires et ainsi de suite.
Autrement dit tu traites incomplètement un seul niveau de profondeur dans l'arborescence, et à ce premier niveau, il se peut que les fichiers simples se voient attribuer une icône par défaut.

Pour traiter une arborecense le mieux est d'écrire un algorithme récursif. C'est à dire une fonction qui s'appelle elle même tant qu'elle détecte un sous répertoire.
Entre parenthèse il y aura un bout de code comme ça en Java dans Programmez! 95. Oui je sais, c'est loin...

Essaie d'écrire cette fonction récursive, et vois ce que ça donne

leneutrino

Ok merci pour ton aide