2010-05-19 14 views
7

Merhaba, görsel stüdyo için bir uzantı yapıyorum ve ihtiyacım olan belirli bir şey daha fazla işlem için editör pencerelerinin seçilen metnini elde etmektir. Birisi bunun hangi arayüze veya servise sahip olduğunu biliyor mu? Önceden açık çözüm yolunu bulmalıyım ve bunun için IVsSolution uygulayan bir servis isteyeceğim, yani bu diğer problem için bana bu bilgiyi veren bir servis olmalı. OnlayoutChanged içindeeditör penceresinin seçili metnini edinin. Görsel stüdyo uzantısı

cevap

3

koduyla bir mesaj açılır olacaktır Aşağıdaki kod seçildiğinde: Başka bir yerde

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

      MessageBox.Show(selectedText); 
     } 

sadece

10

netleştirmek için viewhost ve tip onun _View (IWpfTextView) olsun " Sadece Viewer'ın cevabında Viewer'ın yanıtını alın, burada mevcut editör görünümünü nasıl alacağınız ve Visual Studio 2010 VSPackage'ın herhangi bir yerinden ITextSelection'dan tam kod. Özellikle, mevcut seçimi bir menü komutunun geri çağrısından almak için kullandım.

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

İşte IWpfTextViewHost, ITextDocument ve ITextSelection için MSDN'ın belgeler var.

İlgili konular