문제

Visual Studio Extensibilty API를 사용하여 SQL Server Management Studio에 Addin을 작성하고 있습니다. 나는 텍스트 표면에 컨트롤을 오버레이하는 데 약간의 성공을 거두었지만 (IntelliSense 콤보와 유사하게 Coderush/Refactor Action List 목록을 모방하려고합니다) 다음 속성을 기반으로 한 좌표 공간 만 찾을 수 있습니다.

get
{
    var point = TextDocument.Selection.TopPoint;
    return new Cursor( point.DisplayColumn, point.Line );
}

이 코드를 사용하면 Cols/Rows를 픽셀로 변환 할 수 있지만 텍스트 편집기가 수직 또는 수평으로 스크롤되었을 때 Cols/Rows를 상쇄하는 방법을 찾을 수 없습니다. 이로 인해 ListBox가 보이는 화면 공간 아래에서 사라집니다.

내가 찾고있는 것은 현재 Col/Row 쌍에서 화면 좌표를 가져 오는 방법으로, 스크롤 된 위치에 관계없이 ListBox를 커서 옆에 배치 할 수 있습니다.

도움이 되었습니까?

해결책

TextDocument.selection 속성 (type textSelection의 선택 속성에는 텍스트 판 속성이 있습니다. 여기 더 많은 정보를 위해서. 명시 적으로 그렇게 말하지는 않지만 텍스트 판은 볼 수있는 화면의 일부입니다. 또한, 텍스트 판의 startpoint 속성은 스크롤 된 텍스트의 '오프셋'을 제공합니다.

따라서 선택의 시작점에서 TextPane.startPoint를 빼서 오프셋 커서 위치를 결정할 수있었습니다.

get
{
    var start = TextDocument.Selection.TextPane.StartPoint;
    var top = TextDocument.Selection.TopPoint;
    return new Cursor( 
        top.DisplayColumn - start.DisplayColumn + 1 , 
        top.Line - start.Line + 1 
    );
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top