Stap 6: Het lezen van de geselecteerde tekst
De extra Klembord "slots" zal gedragen net als de reguliere Klembord: de
gebruiker selecteert een tekst over het codevenster en kopieer (of knip) de tekst. Deze actie wordt de geselecteerde tekst kopiëren naar het interne geheugenopslag. Daarna kan de gebruiker de cursor (caret) en plak de waarde wanneer hij/zij wil.
Eerst moeten wij om vast te leggen van de geselecteerde tekst om het huidige venster van de code. Dat doen we door het creëren van een nieuwe methode, genaamd GetActiveTextView(), die een object van het datatype IWpfTextView zal worden opgeslagen op het interne weergaveveld op de vorige stap hebt gemaakt. De code voor de GetActiveTextView() is Toon balg:
privé IWpfTextView GetActiveTextView()
{
IWpfTextView weergave = null;
IVsTextView vTextView;
var txtMgr = MultiSlotClipboardPackage.thePackage.getTextManager();
txtMgr.GetActiveView (1, null, uit vTextView);
var userData = vTextView als IVsUserData;
Als (null! = userData)
{
object houder;
var guidViewHost = DefGuidList.guidIWpfTextViewHost;
userData.GetData (ref guidViewHost, uit de houder);
var viewHost = (IWpfTextViewHost) de houder;
weergave = viewHost.TextView;
}
retourneren van weergave;
}
Deze methode begint met het definiëren van enkele interne variabelen. De weergave-variabele wordt terugbetaald als de actieve weergave bestaat uit het venster van de code; anders zal het null bevatten. De vTextView is een ondersteunende variabele en de txtMgr wordt de huidige weergave van de pakket-klasse MultiSlotClipboardPackage met behulp van de getTextManager() op de stap 4 hebt gemaakt.
Deze methode moeten controleren als het actieve venster is eigenlijk de code venster. Dat doen we door het aanroepen van de methode GetData() van de IVsUserData-interface. De rest van de code is alleen de variabele naar de juiste datypes gieten op een manier die wij hebben een object dat vertegenwoordigt de TextView van de redacteur met de broncode.
Nu we een methode hebben om de huidige weergave van de code van de tekst nodig hebben we om uit te pakken van de tekst die is geselecteerd. We doen dat met behulp van drie nieuwe methoden: GetTextForPastie(), SelectionIsAvailable() en GetSelectedText().
Krijgen de SelectedText
privé statische tekenreeks GetTextForPastie(ITextView view)
{
Als (SelectionIsAvailable(view))
Return GetSelectedText(view);
anders
terug "";
}
Controleer om te zien of er geselecteerde tekst
privé statische bool SelectionIsAvailable (weergave ITextView)
{
Als (weergave == null)
Gooi nieuwe ArgumentNullException("view");
retourneren! weergave. Selection.IsEmpty & & weergave. Selection.SelectedSpans.Count > 0;
}
Krijgen van de huidige geselecteerde tekst
privé statische tekenreeks GetSelectedText(ITextView view)
{
weergave retourneren Selection.SelectedSpans[0]. GetText();
}
De methode GetTextForPastie() ontvangen van de weergave als een parameter en controleer of er geen geselecteerde tekst door het aanroepen van de methode SelectionIsAvailable(), die als een boolean-waarde die aangeeft resultaat of er geen geselecteerde tekst is. De geselecteerde tekst wordt vervolgens verkregen binnen de GetSelectedText() die de eigenschap Selection van het object view gebruikt om de tekst van de eerste SelectedSpan. De volgende link bevat de documentatie van de ITextSelection-interface, die is van het gegevenstype van de eigenschap Selection.
https://MSDN.Microsoft.com/en-us/library/Microsoft.VisualStudio.Text.editor.itextselection.aspx