Чтение документа снизу - PullRequest
0 голосов
/ 06 ноября 2018

At very begining these two blue words are red highlighted. When I click button1(Next),it turn first red word to blue and onclicking again the next one red to blue and so on. Now if I click the button2(prev) then it should turn again red but from the back side or you can say the last highlighted one Я создал надстройку для MS Word. У меня есть две кнопки. Нажмите сначала, чтобы переместить меня вперед, выделив ряд слов. При каждом втором нажатии кнопки я хочу перейти к предыдущему выделенному слову. Кто-нибудь может мне помочь со вторым функционалом кнопки. При нажатии кнопки один у меня этот код работает нормально. Теперь, как перейти к ранее выделенному диапазону слов при каждом нажатии кнопки2 ??

private void adxRibbonButton1_OnClick(object sender, IRibbonControl control, bool pressed)
    {
        object missing = System.Type.Missing;
        Word.Document document = WordApp.ActiveDocument;
        foreach(Word.Range docRange in document.Words)
        {
            if(docRange.HighlightColorIndex.Equals(Microsoft.Office.Interop.Word.WdColorIndex.wdRed))
            {
                docRange.HighlightColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdBlue;
                docRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdWhite;
                break;
            }

        }
    }

1 Ответ

0 голосов
/ 06 ноября 2018

Существует более одного подхода к этому:

  1. Используйте встроенную в Word Find для поиска в документе в обратном направлении первого экземпляра измененной подсветки.

  2. Установите две закладки, одну для текущей позиции кода в вопросе и одну для предыдущей позиции. Пример кода ниже предназначен для этого варианта.

    string CurrentBkm = "_bkmCurrent";
    string LastBkm= "_bkmLast";
    
        if(docRange.HighlightColorIndex.Equals(Microsoft.Office.Interop.Word.WdColorIndex.wdRed))
        {
            docRange.HighlightColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdBlue;
            docRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdWhite;
            if (document.Bookmarks.Exists(CurrentBkm))
            {
                document.Bookmarks.Add(LastBkm, document.Bookmarks[CurrentBkm].Range.Duplicate);
            }
            document.Bookmarks.Add(CurrentBkm, docRange);
            break;
    

Код для button2 просто идет в закладку "_bkmLast":

string LastBkm= "_bkmLast";
document.Bookmarks[LastBkm].Range.Select();

Обратите внимание, что имя закладки начинается с подчеркивания _. Это скрывает закладку в пользовательском интерфейсе Word, поэтому она не будет раздражать пользователя в случае, если в настройках приложения отображаются непечатаемые символы закладки.

Также обратите внимание, что код в вопросе может также работать со встроенной функцией Word Find для поиска в форматировании. Это почти наверняка будет более эффективным, чем "прохождение" каждого слова в документе и тестирование его выделения. Если бы вы изменили код для использования Find, решение, которое я предоставляю с закладками, все равно будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...