MultiSlot Urklipp (6 / 9 steg)
Steg 6: Läsa den markerade texten
Den extra Urklipp slots kommer att bete sig precis som vanliga Urklipp: den
användaren väljer en text om kod-fönstret och kopiera (eller skär) texten. Den här åtgärden Kopiera den markerade texten till inre minneslagring. Efter det kan användaren flytta markören (cirkumflex) och klistra in värdet när han/hon vill.
För att fånga den markerade texten måste vi först få nuvarande kod-fönstret. Vi gör det genom att skapa en ny metod med namnet GetActiveTextView(), som returnerar ett objekt av datatypen IWpfTextView som kommer att lagras på inre fältet Visa skapade på föregående steg. Koden för GetActiveTextView() är Visa nedan:
privat IWpfTextView GetActiveTextView()
{
IWpfTextView Visa = null;
IVsTextView vTextView;
var txtMgr = MultiSlotClipboardPackage.thePackage.getTextManager();
txtMgr.GetActiveView (1, null, ut vTextView).
var userData = vTextView som IVsUserData;
om (null! = userData)
{
objektet innehavaren.
var guidViewHost = DefGuidList.guidIWpfTextViewHost;
userData.GetData (ref guidViewHost, ut korthållaren);
var viewHost = (IWpfTextViewHost) innehavare.
Visa = viewHost.TextView;
}
returnera syn;
}
Den här metoden startar genom att definiera vissa interna variabler. Visa variabeln kommer att returneras om den aktiva vyn är kodfönstret; annars kommer den innehålla null. VTextView är en extra variabel och txtMgr får den aktuella vyn från klassen paketet MultiSlotClipboardPackage med den getTextManager() skapad på steg 4.
Denna metod måste kolla om det aktiva fönstret är faktiskt koden fönstret. Det gör vi genom att anropa metoden GetData() för IVsUserData-gränssnittet. Resten av koden bara gjutning variabeln till den korrekta datypes på ett sätt som vi har ett objekt som representerar TextView av redaktören som har källkoden.
Nu när vi har en metod för att få den aktuella text kodvyn vi ska packa den markerade texten. Vi gör det med tre nya metoder: GetTextForPastie(), SelectionIsAvailable() och GetSelectedText().
Få SelectedText
privata statisk sträng GetTextForPastie(ITextView view)
{
om (SelectionIsAvailable(view))
återvända GetSelectedText(view);
annat
gå tillbaka "";
}
Kontrollera om det finns markerad text
privata statisk bool SelectionIsAvailable (ITextView vy)
{
om (Visa == null)
kasta nya ArgumentNullException("view");
returnera! Visa. Selection.IsEmpty & & Visa. Selection.SelectedSpans.Count > 0;
}
Få den aktuella markerade texten
privata statisk sträng GetSelectedText(ITextView view)
{
returnera Visa. Selection.SelectedSpans[0]. Meddelandsträngar;
}
Den GetTextForPastie() metoden få Visa som en parameter och kontrollera om det finns någon markerad text genom att anropa metoden SelectionIsAvailable(), som returnerar ett booleskt värde som anger om det finns någon markerad text. Den markerade texten fås sedan inuti den GetSelectedText() som används egenskapen urval av texten i den första SelectedSpan. Följande länk innehåller dokumentationen för ITextSelection gränssnittet, som är av datatypen för egenskapen urval.
https://msdn.microsoft.com/en-us/library/Microsoft.VisualStudio.text.Editor.itextselection.aspx