VSTO Word 2007: Comment un contrôle peut-il être déplacé par programme au-dessus / en dessous de la plage d'un contrôle existant?

StackOverflow https://stackoverflow.com/questions/803743

  •  03-07-2019
  •  | 
  •  

Question

Je développe un modèle de document Word 2007 avec VSTO. Le document contient plusieurs RichTextContentControls et il existe un ActionsPane visible avec un contrôle d'arborescence où les nœuds de l'arborescence sont les noms des RichTextContentControls.

Les utilisateurs peuvent réorganiser les nœuds en glissant / déposant les nœuds vers de nouveaux emplacements dans l'arborescence. Au fur et à mesure que les nœuds sont supprimés, les contrôles RichTextContentControls correspondants doivent être réorganisés en fonction des nouveaux emplacements de nœud.

Je suis en mesure de trouver la plage du contrôle sur lequel le nouveau contrôle est supposé être déplacé. Maintenant, il ne me reste plus qu'à trouver un moyen de simplement ... déplacer le contrôle vers ce nouvel emplacement.

Comment puis-je déplacer un contrôle au-dessus / au-dessous d'une plage?

Était-ce utile?

La solution

Je l'ai fait avec un signet à l'intérieur d'un RichTextControl pour le déplacer juste au-dessus / au-dessous d'un autre parmi deux boutons du volet Actions. Comme cela pour monter là où " bm " ci-dessous est égal au signet sélectionné:

Dim pageBookmark As Microsoft.Office.Tools.Word.Bookmark
pageBookmark = Globals.ThisDocument.Controls.Item(bm)
pageBookmark.Range.Relocate(Direction:=Word.WdRelocate.wdRelocateUp)

Pour une vue arborescente, ce serait plus complexe, mais je pouvais voir que vous voudriez que tous vos contrôles richtext soient indexés (utilisez peut-être la propriété "tag"), puis que vous les déplacez dans votre vue arborescente, utilisez l'index pour ajouter / soustraire d'autres index, puis utilisez l'option "Relocaliser". méthode dans une boucle autant de fois pour le rendre à son nouvel emplacement. Ensuite, vous pouvez boucler et recréer l'index. Application.ScreenUpdating = False au début des boucles et réglez-le sur = True à la fin de la boucle arrêterait également le scintillement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top