none
Ajouter un noeud enfant (child node) à un SmartArt RRS feed

  • Question

  • Bonjour,

    Je vous écris suite à mon problème résolu ici : http://social.msdn.microsoft.com/Forums/en-US/d6c06b32-0ed4-4d35-ae6b-f1fdeec9ea30/presentation-powerpoint-smartart?forum=visualcsharpfr

    Cette fois-ci, c'est que j'arrive bien à modifier le texte d'un noeud existant, qu'il soit enfant ou parent, mais je n'arrive pas à créer de noeud enfant.

    Le code suivant fonctionne correctement pour modifier le texte d'un noeud enfant

    using PowerPoint = Microsoft.Office.Interop.PowerPoint;
    using Office = Microsoft.Office.Core;
    namespace CsPPT
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                PowerPoint.Application  oPowerPoint = new PowerPoint.Application();
                PowerPoint.Presentations oPres = oPowerPoint.Presentations;
                PowerPoint.Presentation oPre = oPres.Add(Office.MsoTriState.msoFalse);
                oPre.SaveAs(@"d:\temp\a.ppt");
                oPre.Close();
                oPre = oPres.Open(@"d:\temp\a.ppt");
                PowerPoint.Slides  oSlides = oPre.Slides;
                PowerPoint.Slide oSlide = oSlides.Add(1, PowerPoint.PpSlideLayout.ppLayoutText);
                Office.SmartArtLayout myLayout = oSlide.Application.SmartArtLayouts[7];
                PowerPoint.Shape shape = oSlide.Shapes.AddSmartArt(myLayout, 100, 100, 600, 400);
                shape.SmartArt.AllNodes.Add();
                shape.SmartArt.Nodes[1].TextFrame2.TextRange.Text = "Salut !";
                shape.SmartArt.Nodes[1].Nodes[1].TextFrame2.TextRange.Text = "Salut 2 !";
            }
        }
    }

    L'ajout d'un noeud et la modification d'un noeud parent et d'un noeud enfant fonctionne correctement.

    Cependant, lorsque j'essaye d'ajouter un noeud enfant, il me l'ajoute comme un nouveau noeud parent

    Office.SmartArtNode newNode1 = shape.SmartArt.Nodes[1].Nodes.Add();
    newNode1.TextFrame2.TextRange.Text = "Salut !";

    Que ce soit avec cette commande ou avec celle-ci

    Office.SmartArtNode newNode1 = shape.SmartArt.Nodes[1].AddNode();
    newNode1.TextFrame2.TextRange.Text = "Salut !";

    Merci d'avance de votre aide.

    Cordialement,



    • Modifié DJunior59 mardi 25 février 2014 12:42
    lundi 24 février 2014 21:38

Réponses

Toutes les réponses

  • Bonjour

    Si vous faites un

    newNode1.Demote();
    

    vous obtenez le résultat voulu?

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse DJunior59 mardi 25 février 2014 16:14
    mardi 25 février 2014 14:14
  • Merci beaucoup, c'est exactement le résultat que je souhaite.

    Excusez-moi mais la documentation au niveau de l'utilisation de powerpoint en C# n'est pas facilement accessible donc je ne réussis pas à trouver toutes les fonctions.

    J'aurais 2 autres petites questions : comment faire pour obtenir le résultat inverse ? C'est à dire quel est la fonction inverse de Demote() ? Pour mettre un noeud enfant en parent ? (C'est juste pour information, pour savoir si c'est possible).

    Et ma 2nde question est : Comment est-il possible de supprimer un noeud avec tous ces noeuds enfants ? Car pour supprimer par exemple la 1ère colonne, je suis obligé de faire 3 fois cette commande, car il ne supprime pas directement les noeuds enfant quand on supprime le parent

    shape.SmartArt.Nodes[1].Delete();
    shape.SmartArt.Nodes[1].Delete();
    shape.SmartArt.Nodes[1].Delete();

    Merci beaucoup.

    mardi 25 février 2014 15:44
  • L'inverse de Demote() c'est Promote (). 
    Pour la suppression, je ne crois pas qu'on aura quelque chose pour supprimer les nœuds enfants aussi.
    En effet il n'y a pas un vrai arbre, seulement on l'affiche comme ça – donc on doit supprimer chaque nœud comme vous la faites déjà.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse DJunior59 mardi 25 février 2014 16:14
    mardi 25 février 2014 15:53
  • D'accord. Je ne savais pas que ça n'était pas considéré comme un vrai arbre.

    Merci beaucoup encore une fois, vous répondez vite et bien, c'est vraiment très pratique.

    Merci de votre patience et du temps accordé à mes problèmes.

    Cordialement,


    • Modifié DJunior59 mardi 25 février 2014 16:14
    mardi 25 février 2014 16:14