Frage

Ich bin neu in addins für Visual Studio bauen, aber habe es geschaffen, ein simpe Werkzeug für VS2010 zu bauen, macht eine kleine Textmanipulation in den aktuell aktiven Codefenstern. Ich bin zu dem Punkt, wo ich brauche die Sprache (VB.Net, C # oder was auch immer) der aktuellen Textansicht kennen.

Ich habe versucht, die Dateinamen zu erhalten (so ich an der Erweiterung aussehen kann, die Sprache zu bestimmen) mit dem folgenden Code ein:

IVsTextManager txtMgr = (IVsTextManager)GetService(typeof(SVsTextManager));
int mustHaveFocus = 1;//means true
txtMgr.GetActiveView(mustHaveFocus, null, out currentTextView);

userData = currentTextView as IVsUserData;
if (userData == null)// no text view 
{
    Console.WriteLine("No text view is currently open");
    return;
}

object pathAsObject;
Guid monikerGuid = typeof(IVsUserData).GUID;
userData.GetData(ref monikerGuid, out pathAsObject);
string docPath = (string)pathAsObject;

Leider pathAsObject gibt immer null. Gibt es einen anderen Weg, um die Dateinamen / Sprache zu bekommen?

War es hilfreich?

Lösung

Sieht aus wie dies funktioniert:

// Get the current text view.
IVsTextManager txtMgr = (IVsTextManager)GetService(typeof(SVsTextManager));
int mustHaveFocus = 1;//means true
txtMgr.GetActiveView(mustHaveFocus, null, out currentTextView);

userData = currentTextView as IVsUserData;
if (userData == null)// no text view 
{
    Console.WriteLine("No text view is currently open");
    return;
}

// In the next 4 statments, I am trying to get access to the editor's view 
object holder;
Guid guidViewHost = DefGuidList.guidIWpfTextViewHost;
userData.GetData(ref guidViewHost, out holder);
viewHost = (IWpfTextViewHost)holder;

// Get a snapshot of the current editor's text.
allText = viewHost.TextView.TextSnapshot.GetText();

// Get the language for the current editor.
string language = viewHost.TextViewtextView.TextDataModel.ContentType.TypeName;

Das gibt „Basic“ für VB.Net, das ist genau das, was ich wissen muss.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top