Paso 6: Leer el texto seleccionado
Las ranuras adicionales del portapapeles se comportarán igual que el portapapeles normal: la
el usuario selecciona un texto en la ventana de código y copiar (o cortar) el texto. Esta acción copia el texto seleccionado a la memoria interna. Después de el usuario puede mover el cursor (cursor) y pegar el valor cada vez que él o ella quiere.
Para capturar el texto seleccionado debemos primero obtener la ventana de código actual. Lo hacemos mediante la creación de un nuevo método denominado GetActiveTextView(), que devuelven un objeto del tipo de datos IWpfTextView que se almacenará en el campo interno de la vista creado en el paso anterior. El código de la GetActiveTextView() es mostrar a continuación:
IWpfTextView GetActiveTextView() privado
{
Ver IWpfTextView = null;
VTextView de IVsTextView;
var txtMgr = MultiSlotClipboardPackage.thePackage.getTextManager();
txtMgr.GetActiveView (1, null, hacia fuera vTextView);
var userData = vTextView como IVsUserData;
Si (null! = datos de usuario)
{
sostenedor del objeto;
var guidViewHost = DefGuidList.guidIWpfTextViewHost;
userData.GetData (ref guidViewHost, soporte);
var viewHost = (IWpfTextViewHost) titular;
vista = viewHost.TextView;
}
volver a ver;
}
Este método comienza por definir algunas variables internas. La variable de vista se devolverá si la vista activa es la ventana de código; de lo contrario, contendrá null. La vTextView es una variable auxiliar y el txtMgr obtiene la vista actual de la clase de paquete MultiSlotClipboardPackage con el getTextManager() creado en el paso 4.
Este método que compruebe si la ventana activa es en realidad el código de ventana. Lo hacemos mediante una llamada al método GetData() de la interfaz IVsUserData. El resto del código es casting sólo la variable a la datypes correcta de manera que tenemos un objeto que representa el TextView del editor que tiene el código fuente.
Ahora que ya tenemos un método para obtener la vista de código de texto actual, necesitamos extraer el texto que está seleccionado. Lo hacemos mediante el uso de tres nuevos métodos: GetTextForPastie(), SelectionIsAvailable() y GetSelectedText().
Obtener el SelectedText
cadena estática privada GetTextForPastie(ITextView view)
{
Si (SelectionIsAvailable(view))
volver GetSelectedText(view);
otra cosa
volver "";
}
Compruebe para ver si hay texto seleccionado
privado static bool SelectionIsAvailable (ITextView vista)
{
Si (ver == null)
throw new ArgumentNullException("view");
volver! vista. Selection.IsEmpty & & vista. Selection.SelectedSpans.Count > 0;
}
Obtener el texto seleccionado actual
cadena estática privada GetSelectedText(ITextView view)
{
volver la vista. Selection.SelectedSpans[0]. GetText();
}
El método de GetTextForPastie() recibir la visión como un parámetro y compruebe si hay cualquier texto seleccionado llamando al método SelectionIsAvailable(), que devuelve un valor booleano que indica si hay cualquier texto seleccionado. Luego se obtiene el texto seleccionado dentro la GetSelectedText() que utiliza la propiedad Selection del objeto view para obtener el texto de la primera SelectedSpan. El siguiente enlace contiene la documentación de la interfaz ITextSelection, que es el tipo de datos de la propiedad de la selección.
https://msdn.Microsoft.com/en-us/library/microsoft.VisualStudio.Text.Editor.itextselection.aspx