【发布时间】:2021-10-06 08:44:20
【问题描述】:
情境上下文 - MS Word 插件。
语言 - C#
问题:
我正在尝试获取当前光标位置。我正在使用Application.Selection.Range,因为它返回InsertionPoint。在每次按下Space,Tab 或Enter 键后,我执行以下操作:MessageBox.Show(Application.Selection.Range.Start.ToString()); Sometimes 我看到 MessageBox 的值正确sometimes actual_value_of_insertion_point_position+128。为什么插入点索引有时会增加到 128?我没有做任何具体的事情,我只是输入一些文本,按空格键,有时会看到预期的正确值,有时却没有。
更新 实际上,我的问题更深——here我的另一个 SO 问题,详细描述。我的计划:
1) 当用户输入Space 时记住插入点 - 它返回下一个 未来字母的位置。
2) 如果用户输入了某个字母并且前一个键是空格,则表示用户首先输入一些新词的字母。创建如下Application.ActiveDocument.Range(remembered_pos,rem_pos+1) 的范围并根据需要设置样式。
我的代码
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int pointerCode = Marshal.ReadInt32(lParam);
string pressedKey = ((Keys)pointerCode).ToString();
IntPtr curHandle = GetForegroundWindow();
if(curHandle==wordHandle)
{
//MessageBox.Show(app.ActiveDocument.Content.LanguageID +" "+ WdLanguageID.wdKazakh);
if(pressedKey.Equals("Space")||pressedKey.Equals("Return")||pressedKey.Equals("Tab"))
{
Word.Range r = app.Application.Selection.Range;
MessageBox.Show(app.Application.Selection.Type.ToString());
MessageBox.Show("-"+r.Start.ToString()+"-"+r.End.ToString()); // sometimes +128!
}
else if(firstAfterSpace!=-1)
{ // right now doesn't make sense
MessageBox.Show(firstAfterSpace.ToString());
//Word.Range rng = app.Application.ActiveDocument.Range(firstAfterSpace,firstAfterSpace+1);
//MessageBox.Show("-"+rng.Text+"-");
//rng.Underline = Word.WdUnderline.wdUnderlineNone;
firstAfterSpace = -1;
}
}
}
return CallNextHookEx(hookId, nCode, wParam, lParam);
}
【问题讨论】:
-
您的问题纯粹是信息性的吗?您是否只想知道为什么这是它的工作方式,或者您是否试图完成某件事而这会妨碍您?在后一种情况下 - 如果您能描述您希望完成的任务,将会很有帮助。
-
当你有
value + 128时,你也可以指出确切的情况,但不能只提到sometimes。如果您想在他/她自己的机器上检查此行为,这可能会有所帮助。 -
@Vadim,我想获取当前光标位置。我的意思是整数索引。我使用了
Application.Selection.Range.Start,因为它返回插入点的索引——正是我需要的。它可以工作,但有时会返回不正确的值。我想知道如何解决这个问题。可能还有其他方法可以获取光标位置。 -
@KazJaw,测试用例描述:我输入了一些文本,按下了
Space。光标位置的预期值为text.length+1。 MessageBox 显示text.length+1+128。当我越来越多地按 Space 时,有时我会看到预期值。 -
我的评论意图是获取更多关于您的文档结构的信息,因为在按下 Space、Tab 和 Enter 时没有什么异常情况,它们在
.Start属性结果中出现了奇怪的结果。有桌子吗?领域?内容控件?等等如果你检查.End property- 它的行为是否也很奇怪?你能上传你的文件做一些测试吗?