كيفية القيام بما يلي: التعامل مع طرق عرض لشجرة بواسطة استخدام 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
راجع أيضًا:
المهام
كيفية القيام بما يلي: التحكم في مستكشف الحل
كيفية القيام بما يلي: الصفات المميزة لإطار تغيير