为什么Application.Selection.Range.Start有时会返回错误的值?

时间:2013-08-04 06:02:00

标签: c# ms-word add-in

情境背景 - MS Word插件。
Langiage - C#
问题:

我正在尝试获取当前光标位置。我正在使用Application.Selection.Range,因为它返回InsertionPoint。按下每个Space,TabEnter键后,我会执行以下操作:MessageBox.Show(Application.Selection.Range.Start.ToString()); 有时我看到MessageBox的值正确有时 {{ 1}}。为什么插入点索引有时会增加到128?我没有做任何具体的事情我只是输入一些文字,按空格键并查看有时正确的值,正如预期的那样,不是。

更新 实际上,我的问题更深入 - here我的另一个问题,详细描述。我的计划:

1)当用户输入actual_value_of_insertion_point_position+128时,请记住插入点 - 它会返回下一个后续字母的位置。
2)如果用户键入了某个字母而前一个键是Space,则表示用户输入一些新单词的第一个字母。创建范围如下Space并根据需要设置样式。

我的代码

Application.ActiveDocument.Range(remembered_pos,rem_pos+1)

2 个答案:

答案 0 :(得分:1)

在有人按Space, Return or Tab后,您可以尝试不同的设置范围的方法,假设您在任何这些“字符”之前搜索该字词

以下是您可以放入If statement的代码:

    Word.Range r = appWRD.Application.Selection.Range;
    Word.Range tmpR = r.Previous(Word.WdUnits.wdWord,2);
    MessageBox.Show("-" + tmpR.Start.ToString() + "-" + (r.Start-1).ToString());

    //set temporarily for checking word text
    tmpR = appWRD.ActiveDocument.Range(tmpR.Start, r.Start -1 );
    MessageBox.Show(string.Format("Word found: {0}!", tmpR.Text));
    //this shows it doesn't include any tab or space

提示。 Word中有很多Range modification methods但其中一些无效。根据我的测试,Previous在这种情况下工作正常。

答案 1 :(得分:0)

我相信这是因为你正在使用全局钩子事件。但我不知道原因。我刚试过它。当我使用全局钩子时,范围的索引似乎增加了128.