활성 텍스트보기에서 캐럿 위치가 변경 될 때마다 알림을 받고 싶습니다. EnvDTE가 제공하는 것만이 the LineChanged event인데, 같은 줄에서 캐럿을 왼쪽이나 오른쪽으로 움직일 때 당연히 올라가지 않습니다.VS2008 VSPackage에서 캐럿 위치가 변경 될 때마다 어떻게 알림을 받습니까?
VS2010의 Editor Extensibility를 사용하면 땀을 흘리지 않아도되지만, VS2008과 호환되는 솔루션이 필요합니다.
활성 텍스트보기에서 캐럿 위치가 변경 될 때마다 알림을 받고 싶습니다. EnvDTE가 제공하는 것만이 the LineChanged event인데, 같은 줄에서 캐럿을 왼쪽이나 오른쪽으로 움직일 때 당연히 올라가지 않습니다.VS2008 VSPackage에서 캐럿 위치가 변경 될 때마다 어떻게 알림을 받습니까?
VS2010의 Editor Extensibility를 사용하면 땀을 흘리지 않아도되지만, VS2008과 호환되는 솔루션이 필요합니다.
해결책을 찾았습니다. 해결 방법은 IOleCommandTarget을 만들고 IVsTextView에 등록하는 것입니다 (코드 in this blog post (in Herbrew)의 마지막 두 비트 참조). 그런 다음 명령이 실행될 때마다 캐럿 위치가 변경되었는지 확인합니다. 참고 : this blog post - How to intercept key presses in the Visual Studio text editor
왜 downvote? –
당신이 봤어 : 객체 DTE2 events don't fire
당신은 (백업 이벤트 오브젝트 COM이 GC'd을 범위를 벗어나 가서했기 때문에 나는 가정), 이벤트의 로컬 인스턴스를 유지하기 위해 다른 이벤트 못해 화재가 :
public class MyVSPackage
{
TextEditorEvents _textEditorEvents;
public MyVSPackage()
{
_textEditorEvents = DTE.Events.TextEditorEvents;
_textEditorEvents.LineChanged += (point, endPoint, hint) => //Do something here
}
}
예, 저는 알고 있습니다. 그러나 원래 게시물에 쓴 것처럼 LineChanged는 행이 변경되었을 때만 발생하며 열이 변경되지 않은 경우에만 발생합니다. 어쨌든 고마워! –
죄송합니다. dte.Events를 EnvDTE80.Events2로 형 변환하면 AfterKeyPress 이벤트가있는 TextDocumentKeyPressEvents에 액세스 할 수 있습니다. 너 그거 해봤 니? '(이벤트 2로 dte.Events) .TextDocumentKeyPressEvents.AfterKeyPress + = (keypress, selection, completion) =>' –
불행하게도 AfterKeyPress가 모든 키 누름 (특히 화살표 키 Visual Studio의 내부 명령 처리 코드에서 일찍 처리되므로 트리거하지 않습니다. –
IVsTextView 참조를 사용할 수 있습니까? –
예,'.GetSelection (...) '을 사용하여 캐럿/선택 위치를 얻을 수 있지만 변경되었을 때 알려주는 이벤트를 찾을 수 없습니다. –
VS2008에서 제공되는 정보가 없다고 생각합니다. 얻을 수있는 유일한 캐럿 이벤트는 IVsTextViewEvents의 OnCaretChangeLine입니다. 두 이벤트 사이의 캐럿 위치를 시간에 측정해야합니다. –