3

Visual Studio Extensibilty API を使用して、Sql Server Management Studio にアドインを作成しています。コントロールをテキスト サーフェスにオーバーレイすることに成功しました (インテリセンス コンボと同様に、CodeRush/リファクタリング アクション リストをエミュレートしようとしています) が、次のプロパティに基づいた座標空間しか見つけることができません。

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

このコードを使用すると、列/行をピクセルに変換できますが、テキスト エディターが垂直または水平にスクロールされたときに列/行をオフセットする方法が見つかりません。これにより、リストボックスが表示されている画面スペースの下に表示されなくなります。

私が探しているのは、スクロールされた位置に関係なく、カーソルの隣にリストボックスを配置できるように、現在の列/行のペアから画面座標を取得する方法です。

4

1 に答える 1

1

TextSelectionタイプのTextDocument.Selectionプロパティには、TextPaneプロパティがあります。詳細については、こちらを参照してください。明示的にはそうは言いませんが、TextPaneは画面の表示部分です。さらに、TextPaneのStartPointプロパティは、スクロールされたテキストの「オフセット」を提供します。

したがって、セレクションの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 
    );
}
于 2009-10-28T22:01:25.310 に答える