2009-09-04 2 views
1

코드 파일의 문자열에있는 공백을 밑줄로 바꿀 수있는 매크로를 작성하고 있습니다. 문자열의 시작과 끝을 VirtualPoint의 인스턴스로 찾는 것까지했습니다. 이제 첫 번째 VirtualPoint을 선택하려고합니다. 그리고 나는 그것을 이해할 수 없다.VS 2010 매크로 - 여기에서 여기를 선택하십시오.

매크로를 실행할 때 MessageBox.Show를 사용하고 있기 때문에 VirtualPoint이 정확한지 알고 있습니다. 나는 단지 TextSelection을 첫 번째에서 두 번째로 설정하는 올바른 명령을 모른다. 나는 이것을 시도했다 :

selection.MoveToPoint(firstVirtualPoint) 
selection.MoveToPoint(secondVirtualPoint, True) 

이 작동한다고처럼 보이지만 그렇지 않습니다. 커서는 줄 끝까지 움직입니다 (내가 말할 수있는 한).

누구나 올바른 명령을 알고 있습니까?

답변

2

내가 포기하고 나면 갑자기 나에게 타격을 입는다. 아마도 이것은 다른 사람을 도울 것입니다.

코드의 풀러 샘플은 이것이다 :

Dim selection As TextSelection = 
    CType(DTE.ActiveDocument.Selection, TextSelection) 
selection.StartOfLine() 

selection.FindText("some string at start") 
Dim pointAfterStart = selection.BottomPoint 

selection.FindText("some string at end") 
Dim pointBeforeEnd = selection.TopPoint 

selection.MoveToPoint(pointAfterIt) 
selection.MoveToPoint(pointBeforeLambda, True) 

아이디어는 초기 텍스트를 다음 끝 텍스트를 찾은 다음 그 사이에 모든 것을 선택하는 것입니다. 디버거에서 발견 한 점은 pointAfterStart와 pointBeforeEnd의 값이 으로 변경되었다는 것입니다. 아마도 이름에 속아서 (System.Drawing.Point이 구조체이기 때문에) 나는 현재 선택 위치를 가리키는 참조임을 알지 못했습니다. 선택 나중에 이동할 때 변경하지 않도록

selection.FindText("It ") 
Dim pointAfterIt = selection.BottomPoint.CreateEditPoint 

selection.FindText(" =() =>") 
Dim pointBeforeLambda = selection.TopPoint.CreateEditPoint 

이것은, 선택 지점의 복사본을 만든 :

나는 이런 식으로 해결했다.