كيفية القيام بما يلي: التعامل مع طرق عرض لشجرة بواسطة استخدام UIHierarchy

بعض الأداة الإطارات في Visual Studio، مثل Explorer ماكرو "و" مستكشف الحلول ، ليس لديها الكائنات أتمتة الصريحة التي يمكنك استخدامها لمعالجة الخاصة بهم المحتويات. إطارات الأدوات هذه، على الرغم من ذلك، لديك طريقة عرض شجرة — التي هو، التسلسل الهرمي ونمط المخطط التفصيلي وعرض عقده — يمكنك الوصول إليها بطريقة برمجية. The UIHierarchy كائن represents the شجرة طرق العرض في these أداة windows و enables you إلى يكرر through them و عرض the المحتويات of their nodes.

اسم الكائن

الوصف

UIHierarchyكائن

تمثل عرض الشجرة في إطار الأداة المحددة.

UIHierarchyItemsمجموعة

يمثل كافة العقد الموجودة عرض الشجرة.

UIHierarchyItemكائن

يمثل عقده واحدة في عرض الشجرة.

بواسطة using these الكائنات و collections, you can:

  • حدد (مفرد أو multiply) وعرض العقد الموجودة عرض الشجرة.

  • تحريك نقطة الإدراج لأعلى أو لأسفل عرض الشجرة.

  • Return the القيمة of the محدد العنصر أو have it perform its الافتراضي إجراء.

في Visual Studio 2005, the جديد ToolWindows كائن (which هو also returned من ToolWindows) allows easier referencing of the متنوع أداة windows في Visual Studio. For مثال, rather than using _applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindOutput), you can now استخدم _applicationObject.ToolWindows.OutputWindow.

ملاحظة

قد تختلف مربعات الحوار وأوامر القائمة التى تشاهدها الان عن تلك الموصوفة في التعليمات اعتماداً على الإعدادات النشطة أو الإصدار الخاص بك. تم تطوير هذه الإجراءات من خلال "إعدادات تطوير عام" النشط. To change your settings, choose Import and Export Settings on the Tools menu. لمزيد من المعلومات، راجع العمل مع إعدادات.

مثال

على الرغم من أن UIHierarchyكائن يمثل محتويات تقريبا أي نافذة الأدوات يحتوي طريقة عرض الشجري، مثل مستكشف الحلول أو Explorer ماكرو ، نافذة الأدوات نفسه هو لا تزال Windowالكائن. The UIHierarchyItems خاصية إرجاع the مجموعة of الأعلى-المستوى nodes في the specified أداة نافذة. في مستكشف الحلول ، هناك هو فقط ذات المستوى أعلى عقدة واحدة (الحل). في مستكشف الماكرو ، هناك عقده واحدة فقط ذات المستوى الأعلى (عقده وحدات الماكرو) أيضا. Consequently, the مشروع nodes for these particular windows are في the الأعلى-المستوى عقدة's مجموعة rather than في the نافذة's UIHierarchyItems مجموعة.

Bearing this في mind, there are الثاني ways إلى الوصول a particular عقدة (UIHierarchyItem) في a شجرة عرض:

  • بواسطة using the GetItem أسلوب إلى directly مرجع the desired عقدة using a حل/مشروع/العنصر نقش.

  • بواسطة using UIHierarchyItems.Item.UIHierarchyItems... (a مجموعة/العنصر/مجموعة نقش).

    إلى navigate deeper في a عقدة nesting, just احتفظ using this نقش. For مثال, إلى انتقال إلى a عقدة subordinate إلى the الأعلى-المستوى عقدة, you would استخدم UIHierarchy.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2).

أمثلة of how إلى استخدم كلاهما techniques إلى الوصول a lower-المستوى عقدة are demonstrated في the أمثلة below.

These إضافة-في أمثلة demonstrate how إلى مرجع و استخدم the متنوع الأعضاء of the UIHierarchy automation model إلى قائمة الجميع of the عناصر في الحل مستكشف, و الجميع of the وحدات الماكرو under the ‏‫النماذج عقدة of ماكرو مستكشف.

The أول مثال uses the GetItem أسلوب strategy of accessing the المحتويات of the مراجع عقدة in مستكشف الحل. يظهر المثال الثاني كيفية إلى القيام بنفس الشيء على برنامج مستكشف ماكرو. للحصول على مزيد من المعلومات حول كيفية تشغيل إضافة-في تعليمات برمجية، انظر كيفية القيام بما يلي: ترجمة و تشغيل أمثلة تعليمات برمجية طراز كائن للتنفيذ التلقائي.

ملاحظة

قناة أمثلة تعليمات برمجية التالية الخاصة بهم إخراج بطرق مختلفة. مثال ل من مستكشف الحلول بإرسال بيانات الخاصة به إلى صندوق رسالة Windows، بينما مثال ل مستكشف وحدات الماكرو بإرسال بيانات الخاصة به إلى نافذة الإخراج. في الحالتين هو صحيح وقد لا bearing تشغيل الاستخدام UIHierarchy.

Imports System.Text

Public Sub OnConnection(ByVal application As Object, ByVal  _
connectMode As ext_ConnectMode, ByVal addInInst As Object,  _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    listSlnExpNodes(_applicationObject)
End Sub

Sub listSlnExpNodes(dte as DTE2)
    ' Requires reference to System.Text for StringBuilder.
    Dim UIH As UIHierarchy = dte.ToolWindows.SolutionExplorer
    ' Set a reference to the first level nodes in Solution Explorer. 
    ' Automation collections are one-based.
    Dim UIHItem As UIHierarchyItem = _
      UIH.GetItem("MyAddin1\MyAddin1\References")
    Dim file As UIHierarchyItem
    Dim sb As New StringBuilder

    ' Iterate through first level nodes.
    For Each file In UIHItem.UIHierarchyItems
        sb.AppendLine(file.Name)
        ' Iterate through second level nodes (if they exist).
        Dim subitem As UIHierarchyItem
        For Each subitem In file.UIHierarchyItems
            sb.AppendLine("   " & subitem.Name)
        Next
    Next
    MsgBox(sb.ToString)
End Sub
using System.Text;

public void OnConnection(object application, ext_ConnectMode _
  connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    listSlnExpNodes(_applicationObject);
}

public void listSlnExpNodes(DTE2 dte)
{
    // Requires reference to System.Text for StringBuilder.
    UIHierarchy UIH = dte.ToolWindows.SolutionExplorer;
    // Set a reference to the first level nodes in Solution Explorer. 
    // Automation collections are one-based.
    UIHierarchyItem UIHItem = 
      UIH.GetItem("MyAddin1\\MyAddin1\\References");
    StringBuilder sb = new StringBuilder();

   // Iterate through first level nodes.
   foreach ( UIHierarchyItem file in UIHItem.UIHierarchyItems )
   {
       sb.AppendLine(file.Name);
       // Iterate through second level nodes (if they exist).
       foreach ( UIHierarchyItem subitem in file.UIHierarchyItems )
       {
           sb.AppendLine("   "+subitem.Name);
       }
   }
   MessageBox.Show(sb.ToString());
}
Public Sub OnConnection(ByVal application As Object, ByVal _
  connectMode As ext_ConnectMode, ByVal addInInst As Object, ByRef _
  custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    ListMacroSamples1(_applicationObject)
End Sub

Sub ListMacroSamples1(ByVal dte As DTE2)
    ' Reference the UIHierarchy, UIHierarchyItem, and OutputWindow 
    ' objects.
    Dim UIH As UIHierarchy = CType(dte.Windows.Item _
      (Constants.vsWindowKindMacroExplorer).Object, UIHierarchy)
    Dim samples As UIHierarchyItem = UIH.GetItem("Macros\Samples")
    Dim OWPane As OutputWindowPane = GetOutputWindowPane _
      ("List Macros", True)
    Dim file As UIHierarchyItem

    OWPane.Clear()
    For Each file In samples.UIHierarchyItems
        OWPane.OutputString(file.Name & _
        Microsoft.VisualBasic.Constants.vbCrLf)
        Dim macro As UIHierarchyItem
        For Each macro In file.UIHierarchyItems
            OWPane.OutputString("   " & macro.Name & _
            Microsoft.VisualBasic.Constants.vbCrLf)
        Next
    Next
End Sub

Function GetOutputWindowPane(ByVal Name As String, Optional ByVal _
  show As Boolean = True) As OutputWindowPane
    ' This is a support function for ListMacroSamples(). It provides 
    ' the Output window to list the contents of the Sample node.
    Dim win As Window = _applicationObject.Windows.Item _
      (EnvDTE.Constants.vsWindowKindOutput)
    If show Then win.Visible = True
    Dim OW As OutputWindow = _applicationObject. _
      ToolWindows.OutputWindow
    Dim OWPane As OutputWindowPane
    Try
        OWPane = OW.OutputWindowPanes.Item(Name)
    Catch e As System.Exception
        OWPane = OW.OutputWindowPanes.Add(Name)
    End Try
    OWPane.Activate()
    Return OWPane
End Function
public void OnConnection(object application, ext_ConnectMode 
  connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    ListMacroSamples1(_applicationObject);
}

public void ListMacroSamples1(DTE2 dte)
{
    // Reference the UIHierarchy, UIHierarchyItem, and OutputWindow 
    // objects.
    UIHierarchy UIH = (UIHierarchy) 
      dte.Windows.Item(Constants.vsWindowKindMacroExplorer).Object;
    UIHierarchyItem samples = UIH.GetItem("Macros\\Samples");
    OutputWindowPane OWPane = GetOutputWindowPane("List Macros", true);
        
    OWPane.Clear();
    foreach ( UIHierarchyItem fid in samples.UIHierarchyItems )
    {
        OWPane.OutputString(fid.Name+Environment.NewLine);
        foreach ( UIHierarchyItem macro in fid.UIHierarchyItems )
        {
            OWPane.OutputString("   " + macro.Name + 
              Environment.NewLine);
        }
    }
}

public OutputWindowPane GetOutputWindowPane(string Name, bool show)
{
    // This is a support function for ListMacroSamples(). It provides 
    // the Output window to list the contents of the Sample node.
    Window win = _applicationObject.Windows.Item
      (EnvDTE.Constants.vsWindowKindOutput);
    if (show) { win.Visible = true; }
    OutputWindow OW = _applicationObject.ToolWindows.OutputWindow;
    OutputWindowPane OWPane;
    try
    {
        OWPane = OW.OutputWindowPanes.Item(Name);
    }
    catch (System.Exception e)
    {
        OWPane = OW.OutputWindowPanes.Add(Name + 
          Environment.NewLine + e.Message);
    }
    OWPane.Activate();
    return OWPane;
}

وهذا مثال يستخدم UIHierarchyItems.Item.UIHierarchyItemsنقش للوصول إلى عقدة في UIHierarchy. وهذا مثال سرد وحدات الماكرو الموجودة في ثانية UIHierarchyعقدة مستكشف ماكرو . ملاحظة أن هذا مثال أيضا باستدعاء دالة، من GetOutputWindowPane، من مثال أعلاه.

Public Sub OnConnection(ByVal application As Object, ByVal _
  connectMode As ext_ConnectMode, ByVal addInInst As Object, _
  ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    ListMacroSamples2(_applicationObject)
End Sub

Sub ListMacroSamples2(ByVal dte As DTE2)
    Dim uih As UIHierarchy = CType(dte.Windows.Item _
     (Constants.vsWindowKindMacroExplorer).Object, UIHierarchy)
    ' Set a reference to the second node in Macro Explorer. The 
    ' collections are one-based.
    Dim uihItem As UIHierarchyItem = _
    uih.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2)
    Dim file As UIHierarchyItem
    Dim owPane As OutputWindowPane = GetOutputWindowPane("List Macros")
    For Each file In uihItem.UIHierarchyItems
        owPane.OutputString(file.Name & _
        Microsoft.VisualBasic.Constants.vbCrLf)
        Dim macro As UIHierarchyItem
        For Each macro In file.UIHierarchyItems
            owPane.OutputString("   " & macro.Name & _
            Microsoft.VisualBasic.Constants.vbCrLf)
        Next
    Next
End Sub

Function GetOutputWindowPane(ByVal Name As String, Optional ByVal _
  show As Boolean = True) As OutputWindowPane
    ' This is a support function for ListMacroSamples(). It provides 
    ' the Output window to list the contents of the Sample node.
    Dim win As Window = _applicationObject.Windows.Item _
     (EnvDTE.Constants.vsWindowKindOutput)
    If show Then win.Visible = True
    Dim OW As OutputWindow = _
      _applicationObject.ToolWindows.OutputWindow
    Dim OWPane As OutputWindowPane
    Try
        OWPane = OW.OutputWindowPanes.Item(Name)
    Catch e As System.Exception
        OWPane = OW.OutputWindowPanes.Add(Name)
    End Try
    OWPane.Activate()
    Return OWPane
 End Function
public void OnConnection(object application, ext_ConnectMode 
  connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    ListMacroSamples2(_applicationObject);
}

public void ListMacroSamples2(DTE2 dte)
{
    UIHierarchy uih = (UIHierarchy) 
    dte.Windows.Item(Constants.vsWindowKindMacroExplorer).Object;
    // Set a reference to the second node in Macro Explorer. The 
    // collections are one-based.
    UIHierarchyItem uihItem = 
      uih.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2);
        
    OutputWindowPane owPane = GetOutputWindowPane("List Macros", true);
    foreach ( UIHierarchyItem fid in uihItem.UIHierarchyItems )
    {
         owPane.OutputString(fid.Name+Environment.NewLine);
         foreach ( UIHierarchyItem macro in fid.UIHierarchyItems )
         {
             owPane.OutputString("   " + macro.Name + 
               Environment.NewLine);
         }
    }
}

public OutputWindowPane GetOutputWindowPane(string Name, bool show)
{
    // This is a support function for ListMacroSamples(). It provides 
    // the Output window to list the contents of the Sample node.
    Window win = _applicationObject.Windows.Item
      (EnvDTE.Constants.vsWindowKindOutput);
    if (show) { win.Visible = true; }
    OutputWindow OW = _applicationObject.ToolWindows.OutputWindow;
    OutputWindowPane OWPane;
    try
    {
        OWPane = OW.OutputWindowPanes.Item(Name);
    }
    catch (System.Exception e)
    {
        OWPane = OW.OutputWindowPanes.Add(Name + Environment.NewLine + 
          e.Message);
    }
    OWPane.Activate();
    return OWPane;
}

يوضح المثال الماكرو التالي كيفية إلى استخدام UIHierarchyإلى سرد محتويات عرض الشجري نافذة مستكشف الحل .

Sub cvTreeView()
    Dim uih As UIHierarchy = DTE.ToolWindows.SolutionExplorer
    Dim uihItem As UIHierarchyItem
    Dim uihItems As UIHierarchyItems = uih.UIHierarchyItems
    Dim msg As String
    For Each uihItem In uihItems
        msg += uihItem.Name & vbCr
    Next
    MsgBox(msg)
End Sub

راجع أيضًا:

المهام

كيفية القيام بما يلي: التحكم في مستكشف الحل

كيفية القيام بما يلي: الصفات المميزة لإطار تغيير

المبادئ

مخطط نموذج كائن تلقائي

موارد أخرى

إنشاء و التحكم في بيئة Windows

إنشاء إضافة-زر 'Ins' ومعالجات

التنفيذ التلقائي والمرجع الامتداد