상황 별 상황 - MS Word 추가 기능.
Langiage - C#
문제 :Application.Selection.Range.Start가 때때로 잘못된 값을 반환하는 이유는 무엇입니까?
현재 커서 위치를 얻으려고합니다. InsertionPoint
을 반환하므로 Application.Selection.Range
을 사용하고 있습니다. 각 Space,Tab
또는 Enter
키를 누른 후 다음을 수행합니다. 간혹 올바른 값 인 MessageBox가 표시됩니다.actual_value_of_insertion_point_position+128
가끔 있습니다. 왜 때때로 삽입 점 인덱스가 128로 증가 했습니까? 나는 아무것도하지 않고있다. 단지 텍스트를 입력하고, Space를 누르고, 때로는 올바른 값을 예상하지 않는다.
UPDATE 사실, 내 문제는 깊은 - 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);
}
질문에 대한 답변이 순전히 있습니까? 왜 이것이 이것이 작동하는 방식인지 또는 당신이 무언가를 성취하려고 시도하고 이것이 당신의 방식대로되는 이유를 알고 싶습니까? 나중의 경우 - 성취하고자하는 바를 설명 할 수 있다면 도움이 될 것입니다. – Vadim
당신은 또한'value + 128'을 가질 때 정확한 상황을 지적 할 수 있지만'때때로'를 언급 할뿐만 아니라. 이것은 자신의 컴퓨터에서이 동작을 확인하려는 경우 유용 할 수 있습니다. –
@ Vadim, 현재 커서 위치를 가져오고 싶습니다. 나는 정수 인덱스를 의미합니다. 삽입 포인터의 인덱스를 반환하므로'Application.Selection.Range.Start'를 사용했습니다. 그것은 작동하지만 때로는 잘못된 값을 반환합니다. 이 문제를 어떻게 해결할 수 있는지 알고 싶습니다. 커서 위치를 얻는 다른 방법이있을 수 있습니다. – Baurzhan