2010-05-19 11 views
7

hola estoy haciendo una extensión para el estudio visual y lo específico que necesito es obtener el texto seleccionado de las ventanas del editor para su posterior procesamiento. ¿Alguien sabe qué interfaz o servicio tiene esto? Anteriormente necesito localizar la ruta de la solución abierta y para eso solicito un servicio que implementa IVsSolution, por lo que para este otro problema, creo que debe haber algún servicio que me proporcione esta información.obtener el texto seleccionado de la ventana del editor ... extensión de estudio visual

Respuesta

3

interior de la OnlayoutChanged el siguiente código se mostrará un mensaje con el código seleccionado:

if (_view.Selection.IsEmpty) 
     { 
      return; 
     } 
     else 
     { 
      string selectedText = _view.Selection.StreamSelectionSpan.GetText(); 

      MessageBox.Show(selectedText); 
     } 

en otro sitio acaba de obtener el viewhost y es el _view del tipo (IWpfTextView)

10

Para aclarar " acaba de obtener el viewhost "en la respuesta de Stacker, aquí está el código completo de cómo puede obtener la vista del editor actual, y desde allí el ITextSelection, desde cualquier otro lugar en un VSPackage de Visual Studio 2010. En particular, utilicé esto para obtener la selección actual de una devolución de llamada de comando de menú.

IWpfTextViewHost GetCurrentViewHost() 
{ 
    // code to get access to the editor's currently selected text cribbed from 
    // http://msdn.microsoft.com/en-us/library/dd884850.aspx 
    IVsTextManager txtMgr = (IVsTextManager)GetService(typeof(SVsTextManager)); 
    IVsTextView vTextView = null; 
    int mustHaveFocus = 1; 
    txtMgr.GetActiveView(mustHaveFocus, null, out vTextView); 
    IVsUserData userData = vTextView as IVsUserData; 
    if (userData == null) 
    { 
     return null; 
    } 
    else 
    { 
     IWpfTextViewHost viewHost; 
     object holder; 
     Guid guidViewHost = DefGuidList.guidIWpfTextViewHost; 
     userData.GetData(ref guidViewHost, out holder); 
     viewHost = (IWpfTextViewHost)holder; 
     return viewHost; 
    } 
} 


/// Given an IWpfTextViewHost representing the currently selected editor pane, 
/// return the ITextDocument for that view. That's useful for learning things 
/// like the filename of the document, its creation date, and so on. 
ITextDocument GetTextDocumentForView(IWpfTextViewHost viewHost) 
{ 
    ITextDocument document; 
    viewHost.TextView.TextDataModel.DocumentBuffer.Properties.TryGetProperty(typeof(ITextDocument), out document); 
    return document; 
} 

/// Get the current editor selection 
ITextSelection GetSelection(IWpfTextViewHost viewHost) 
{ 
    return viewHost.TextView.Selection; 
} 

Aquí hay documentación de MSDN para IWpfTextViewHost, ITextDocument y ITextSelection.

Cuestiones relacionadas