2010-05-19 2 views
7

Hallo, ich mache eine Erweiterung für Visual Studio und die spezifische Sache, die ich brauche, ist den ausgewählten Text des Editor Windows für die weitere Verarbeitung. Jemand weiß, welche Schnittstelle oder welcher Dienst das hat? Zuvor muss ich den Pfad der offenen Lösung suchen und dafür frage ich nach einem Dienst, der IVsSolution implementiert, so dass ich für dieses andere Problem, dass es einen Dienst geben muss, der mir diese Informationen bereitstellt.erhalten Sie den ausgewählten Text des Editor-Fenster..visual Studio-Erweiterung

Antwort

3

innerhalb des OnlayoutChanged der folgende Code eine Nachricht mit dem Code Pop-up ausgewählt:

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

      MessageBox.Show(selectedText); 
     } 

anderswo nur bekommen viewhost und seine die _view vom Typ (IWpfTextView)

10

Um zu klären " Holen Sie sich einfach den viewhost "in Stacker's Antwort, hier ist der vollständige Code, wie Sie die aktuelle Editor-Ansicht und von dort die ITextSelection von irgendwo anders in einem Visual Studio 2010 VSPackage bekommen können. Insbesondere habe ich damit die aktuelle Auswahl aus einem Menübefehl Rückruf abgerufen.

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; 
} 

Hier docs MSDN für IWpfTextViewHost, ITextDocument und ITextSelection.

Verwandte Themen