VSTO Word 2007: Как программно переместить элемент управления выше / ниже диапазона существующего элемента управления? - PullRequest
3 голосов
/ 29 апреля 2009

Я разрабатываю шаблон документа Word 2007 с VSTO. В документе есть несколько RichTextContentControls, и есть видимая ActionsPane с элементом управления treeview, где узлы дерева представляют собой имена RichTextContentControls.

Пользователи могут переупорядочивать узлы, перетаскивая узлы в новые места в древовидной структуре. По мере удаления узлов соответствующие RichTextContentControls должны быть переупорядочены в соответствии с расположением новых узлов.

Я могу найти диапазон элемента управления, над которым предполагается переместить новый элемент управления. Теперь мне нужно только найти способ просто ... переместить элемент управления в это новое местоположение.

Как мне переместить элемент управления выше / ниже диапазона?

1 Ответ

4 голосов
/ 03 октября 2009

Я сделал это с помощью закладки внутри RichTextControl, чтобы просто переместить ее выше / ниже другой из двух кнопок на панели действий. Например, для перемещения вверх, где «bm» ниже соответствует выбранной закладке:

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

Для древовидного представления это было бы более сложно, но я мог видеть, что вы хотите, чтобы все ваши элементы управления richtext были проиндексированы (возможно, используйте свойство "tag"), а затем, когда вы перемещаете их в виде дерева, используйте индекс для добавления / вычитания из других индексов и последующего многократного использования метода «Перемещение» в цикле, чтобы получить его в новом месте. Затем вы можете зациклить и воссоздать индекс. Application.ScreenUpdating = False в начале цикла и возврат его на = True в конце цикла также остановит мерцание.

...