Frage

ich ein AddIn in SQL Server Management Studio schreibe, die Visual Studio der Erweiterbarkeit APIs. Ich habe einen gewissen Erfolg hatte eine Kontrolle auf die Textoberfläche überlagert (Ich bin versucht, die CodeRush / Umgestalten Aktionsliste, ähnlich wie die Intellisense-Combo zu emulieren), jedoch kann ich erkennen nur dann ist es Raum basiert die folgende Eigenschaft koordinieren:

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

Dieser Code tut mir erlauben, dann cols / Zeilen in Pixel zu konvertieren, aber ich kann nicht einen Weg finden, um die Spalten / Zeilen, wenn der Texteditor gescrollt wurde oder horizontal entweder vertikal versetzt. Dies bewirkt, dass das Listenfeld unterhalb der sichtbaren Bildschirmfläche zu verschwinden.

Was ich suche ist eine Methode, um den Bildschirm zu bekommen Koordinaten von der aktuellen col / row Paar, so dass ich das Listenfeld neben dem Cursor platzieren können, unabhängig von der Position gescrollt.

War es hilfreich?

Lösung

Die TextDocument.Selection Eigenschaft vom Typ Textselection, hat eine TextPane Eigenschaft - siehe hier für weitere Informationen. Es muss nicht explizit sagen, so, aber die TextPane ist der Teil des Bildschirms, der sichtbar ist. Ferner ist der ‚Offset‘ des gescrollt Text der Startpoint-Eigenschaft für einen TextPane bietet.

Ich war daher in der Lage, die Offset-Cursor-Position zu bestimmen, indem die TextPane.StartPoint von der Auswahl der Startpoint Subtraktion:

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 
    );
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top