Entwickler-Ecke
Sonstiges (.NET) - AddIn für VisualStudio
MBreuer2 - Mo 24.06.13 18:01
Titel: AddIn für VisualStudio
Hallo,
ich habe ein Addin in c# begonnen mit dem ich Quellcode verändern möchte.
Den ersten Schritt habe ich schon geschafft, ich kann einen Text bei der Cursorposition einstellen.
Jetzt möchte ich gern wissen zu welchem Namespace diese Cursorposition gehört,
ich habe mit folgendem Code
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| CodeElements elements = _applicationObject.ActiveDocument.ProjectItem.FileCodeModel.CodeElements; foreach (CodeElement element in elements) { if (element.Kind == vsCMElement.vsCMElementNamespace) { CodeNamespace ns = (CodeNamespace)element; MeinEditPoint.Insert("Namespace: " + ns.FullName); } } |
geschafft einen Namespace zu erkennen.
Leider habe ich geschachtelte Namespaces noch nicht erkannt und außerdem kann es ja sein das die Datei mehrere Namespaces enthält.
Also:
den voll qualifizierten Namespace an der Cursorposition muss ich ermitteln.
Kann mir bitte jemand mit einem einfachen Codeschnipsel helfen ?
Danke
Moderiert von
Th69: Codeformatierung überarbeitet.
MBreuer2 - Di 25.06.13 15:29
Danke für den Hinweis,
ich habe im Netz etwas code gefunden und angepasst.
Die Funktion
GetCodeElementAtCursor liefert einen string mit dem Namespace.
Sicher lässt sich durch verändern von
aSearchElement auch nach anderen Elementen suchen.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95:
| #region code to get the namespace private string GetCodeElementAtCursor() { vsCMElement aSearchElement = vsCMElement.vsCMElementNamespace; string aResult = string.Empty; EnvDTE.CodeElement aObjCodeElement = null; EnvDTE.TextPoint aObjCursorTextPoint; try { aObjCursorTextPoint = GetCursorTextPoint(); if (!(aObjCursorTextPoint == null)) { aObjCodeElement = GetCodeElementAtTextPoint(aSearchElement, _applicationObject.ActiveDocument.ProjectItem.FileCodeModel.CodeElements, aObjCursorTextPoint); } if (null != aObjCodeElement) { aResult = aObjCodeElement.FullName; } } catch (System.Exception ) { } return aResult; }
private EnvDTE.TextPoint GetCursorTextPoint() { EnvDTE.TextPoint aObjCursorTextPoint = null; try { aObjCursorTextPoint = ((EnvDTE.TextDocument)((EnvDTE80.DTE2)_applicationObject).ActiveDocument.Object("textdocument")).Selection.ActivePoint; } catch (System.Exception ) { } return aObjCursorTextPoint; }
private EnvDTE.CodeElement GetCodeElementAtTextPoint(EnvDTE.vsCMElement theRequestedCodeElementKind, EnvDTE.CodeElements theColCodeElements, EnvDTE.TextPoint theObjTextPoint) { EnvDTE.CodeElement aObjResultCodeElement = null; EnvDTE.CodeElements aColCodeElementMembers; EnvDTE.CodeElement aObjMemberCodeElement; if (!(theColCodeElements == null)) { foreach (EnvDTE.CodeElement aObjCodeElement in theColCodeElements) { if (aObjCodeElement.StartPoint.GreaterThan(theObjTextPoint)) { } else if (aObjCodeElement.EndPoint.LessThan(theObjTextPoint)) { } else { if ((aObjCodeElement.Kind == theRequestedCodeElementKind)) { aObjResultCodeElement = aObjCodeElement; } aColCodeElementMembers = aObjCodeElement.Children; aObjMemberCodeElement = GetCodeElementAtTextPoint(theRequestedCodeElementKind, aColCodeElementMembers, theObjTextPoint); if (!(aObjMemberCodeElement == null)) { aObjResultCodeElement = aObjMemberCodeElement; } break; } } } return aObjResultCodeElement; } #endregion |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!