TextPatternRange.MoveEndpointByUnit Método

Definición

Mueve un punto de conexión del intervalo de texto el número especificado de TextUnit dentro del intervalo del documento.

public:
 int MoveEndpointByUnit(System::Windows::Automation::Text::TextPatternRangeEndpoint endpoint, System::Windows::Automation::Text::TextUnit unit, int count);
public int MoveEndpointByUnit (System.Windows.Automation.Text.TextPatternRangeEndpoint endpoint, System.Windows.Automation.Text.TextUnit unit, int count);
member this.MoveEndpointByUnit : System.Windows.Automation.Text.TextPatternRangeEndpoint * System.Windows.Automation.Text.TextUnit * int -> int
Public Function MoveEndpointByUnit (endpoint As TextPatternRangeEndpoint, unit As TextUnit, count As Integer) As Integer

Parámetros

endpoint
TextPatternRangeEndpoint

punto de conexión que se debe mover.

unit
TextUnit

Unidad textual que se debe mover.

count
Int32

Número de unidades para mover. Un recuento positivo mueve el punto de conexión hacia delante. Un recuento negativo lo mueve hacia atrás. Un recuento de 0 no tiene ningún efecto.

Devoluciones

Número de unidades que realmente se mueven. Puede ser menor que el número solicitado si al mover el punto de conexión se pasa por el principio o el final del documento.

Ejemplos

private Int32 MoveEndpointByRangeFromSelection(AutomationElement target, Int32 units)
{
    // Specify the control type we're looking for, in this case 'Document'
    PropertyCondition cond = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Document);

    // target --> The root AutomationElement.
    AutomationElement textProvider = target.FindFirst(TreeScope.Descendants, cond);

    TextPattern textpatternPattern = textProvider.GetCurrentPattern(TextPattern.Pattern) as TextPattern;

    if (textpatternPattern == null)
    {
        Console.WriteLine("Root element does not contain a descendant that supports TextPattern.");
        return 0;
    }
    TextPatternRange[] currentSelection = textpatternPattern.GetSelection();

    return currentSelection[0].MoveEndpointByUnit(
        TextPatternRangeEndpoint.Start, TextUnit.Paragraph, units);
}
Private Function MoveEndpointByRangeFromSelection(ByVal target As AutomationElement, ByVal units As Int32) As Int32
    ' Specify the control type we're looking for, in this case 'Document'
    Dim cond As PropertyCondition = New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Document)

    ' target --> The root AutomationElement.
    Dim textProvider As AutomationElement = target.FindFirst(TreeScope.Descendants, cond)

    Dim textpatternPattern As TextPattern = CType(textProvider.GetCurrentPattern(TextPattern.Pattern), TextPattern)

    If (textpatternPattern Is Nothing) Then
        Console.WriteLine("Root element does not contain a descendant that supports TextPattern.")
        Return Nothing
    End If
    Dim currentSelection As TextPatternRange() = textpatternPattern.GetSelection()
    ' GetText(-1) retrieves all characters but can be inefficient
    Return currentSelection(0).MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Paragraph, units)
End Function

Comentarios

Cuando es necesario atravesar el contenido de un intervalo de texto, se realizan en segundo plano una serie de pasos para que el método Move pueda ejecutarse correctamente.

  1. El intervalo de texto se normaliza, es decir, se contrae, en un intervalo degenerado en el extremo Start , y el extremo End queda superfluo. Este paso es necesario para quitar la ambigüedad en situaciones en las que un intervalo de texto abarca los límites unit ; por ejemplo, "{El RL https://www.microsoft.com/ U}está incrustado en texto", donde "{" y "}" son los puntos de conexión del intervalo de texto.

  2. El intervalo resultante se mueve hacia atrás en DocumentRange , al principio del límite unit solicitado.

  3. A continuación, el intervalo se expande desde un estado de intervalo degenerado moviendo el extremo End en función de un límite unit solicitado.

Ajustes de intervalo por Move & ExpandToEnclosingUnit
Ejemplos de cómo se ajusta un intervalo de texto para Move() y ExpandToEnclosingUnit()

El contenido textual (o texto interno) de un contenedor de texto y un objeto incrustado, como un hipervínculo o una celda de tabla, se expone como una secuencia de texto continua única en las vistas de control y contenido del árbol de Automatización de la interfaz de usuario. Los límites del objeto se ignoran. Si un cliente de Automatización de la interfaz de usuario recupera el texto con el objetivo de realizar alguna declaración, interpretarlo o analizarlo de alguna manera, el intervalo de texto se debe comprobar en los casos especiales (por ejemplo, una tabla con contenido textual u otros objetos incrustados). Esto se puede lograr mediante una llamada GetChildren a para obtener un AutomationElement para cada objeto incrustado y, a continuación, llamar RangeFromChild a para obtener un intervalo de texto para cada elemento; esto se hace de forma recursiva hasta que se haya recuperado todo el contenido textual.

Intervalos de texto distribuidos por objetos incrustados.
Ejemplo de una secuencia de texto con objetos incrustados y sus intervalos

MoveEndpointByUnit se aplaza al siguiente mayor TextUnit admitido si el control especificado TextUnit no es compatible con el control .

El pedido, de la unidad más pequeña al más grande, se muestra a continuación.

Se aplica a