Compartir a través de


Buscar un elemento de UI Automation para un elemento de lista

NotaNota

Esta documentación está dirigida a desarrolladores de .NET Framework que desean usar las clases administradas de UI Automation definidas en el espacio de nombres System.Windows.Automation.Para obtener información actualizada sobre UI Automation, vea Windows Automation API: UI Automation.

En este tema se muestra cómo recuperar un objeto AutomationElement para un elemento de una lista cuando se conoce el índice del elemento.

Ejemplo

En el ejemplo siguiente se muestran dos maneras de recuperar un elemento específico de una lista: mediante TreeWalker y mediante FindAll.

La primera técnica suele ser más rápida para los controles Win32, pero la segunda lo es más para los controles Windows Presentation Foundation (WPF).

''' <summary>
''' Retrieves an element in a list, using TreeWalker.
''' </summary>
''' <param name="parent">The list element.</param>
''' <param name="index">The index of the element to find.</param>
''' <returns>The list item.</returns>
Function FindChildAt(ByVal parent As AutomationElement, ByVal index As Integer) As AutomationElement

    If (index < 0) Then
        Throw New ArgumentOutOfRangeException()
    End If
    Dim walker As TreeWalker = TreeWalker.ControlViewWalker
    Dim child As AutomationElement = walker.GetFirstChild(parent)
    For x As Integer = 1 To (index - 1)
        child = walker.GetNextSibling(child)
        If child = Nothing Then

            Throw New ArgumentOutOfRangeException()
        End If
    Next x
    Return child
End Function

''' <summary>
''' Retrieves an element in a list, using FindAll.
''' </summary>
''' <param name="parent">The list element.</param>
''' <param name="index">The index of the element to find.</param>
''' <returns>The list item.</returns>
Function FindChildAtB(ByVal parent As AutomationElement, ByVal index As Integer) As AutomationElement
    Dim findCondition As Condition = _
        New PropertyCondition(AutomationElement.IsControlElementProperty, True)
    Dim found As AutomationElementCollection = parent.FindAll(TreeScope.Children, findCondition)
    If (index < 0) Or (index >= found.Count) Then
        Throw New ArgumentOutOfRangeException()
    End If
    Return found(index)
End Function
/// <summary>
/// Retrieves an element in a list, using TreeWalker.
/// </summary>
/// <param name="parent">The list element.</param>
/// <param name="index">The index of the element to find.</param>
/// <returns>The list item.</returns>
AutomationElement FindChildAt(AutomationElement parent, int index)
{
    if (index < 0)
    {
        throw new ArgumentOutOfRangeException();
    }
    TreeWalker walker = TreeWalker.ControlViewWalker;
    AutomationElement child = walker.GetFirstChild(parent);
    for (int x = 1; x <= index; x++)
    {
        child = walker.GetNextSibling(child);
        if (child == null)
        {
            throw new ArgumentOutOfRangeException();
        }
    }
    return child;
}

/// <summary>
/// Retrieves an element in a list, using FindAll.
/// </summary>
/// <param name="parent">The list element.</param>
/// <param name="index">The index of the element to find.</param>
/// <returns>The list item.</returns>
AutomationElement FindChildAtB(AutomationElement parent, int index)
{
    Condition findCondition = new PropertyCondition(AutomationElement.IsControlElementProperty, true);
    AutomationElementCollection found = parent.FindAll(TreeScope.Children, findCondition);
    if ((index < 0) || (index >= found.Count))
    {
        throw new ArgumentOutOfRangeException();
    }
    return found[index];
}

Vea también

Conceptos

Obtener elementos de UI Automation