Langue

TextPatternRange.MoveEndpointByUnit Méthode

Définition

Déplace un point de terminaison de la plage de texte le nombre spécifié de TextUnits dans la plage de documents.

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

Paramètres

endpoint
TextPatternRangeEndpoint

Point de terminaison à déplacer.

unit
TextUnit

Unité textuelle pour le déplacement.

count
Int32

Nombre d'unités à déplacer. Un nombre positif déplace le point de terminaison vers l’avant. Un nombre négatif se déplace vers l’arrière. Un nombre de 0 n’a aucun effet.

Retours

Nombre d’unités réellement déplacées, ce qui peut être inférieur au nombre demandé si le déplacement du point de terminaison s’exécute dans le début ou la fin du document.

Exemples

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

Remarques

Lorsqu’il est nécessaire de parcourir le contenu d’une plage de texte, une série d’étapes est impliquée en arrière-plan pour que la Move méthode s’exécute correctement.

  1. La plage de texte est normalisée ; autrement dit, la plage de texte est réduite à une plage dégénérée au niveau du Start point de terminaison, ce qui rend le End point de terminaison superflu. Cette étape est nécessaire pour supprimer l’ambiguïté dans les situations où une plage de texte s’étend sur des unit limites ; par exemple, « {La liste de révocation de certificats U} https://www.microsoft.com/ est incorporée dans le texte » où « { » et « } » sont les points de terminaison de plage de texte.

  2. La plage résultante est déplacée vers l’arrière dans le DocumentRange jusqu’au début de la limite demandée unit.

  3. La plage est ensuite étendue à partir d'un état de plage dégénérée en déplaçant le point de terminaison End d'une limite unit demandée.

Ajustements de plage par Move &ExpandToEnclosingUnit Exemples de l’ajustement d’une plage de texte pour Move() et ExpandToEnclosingUnit()

Le contenu textuel (ou texte interne) d’un conteneur de texte et d’un objet incorporé, tel qu’un lien hypertexte ou une cellule de tableau, est exposé sous la forme d’un flux de texte unique et continu dans la vue de contrôle et l’affichage de contenu de l’arborescence UI Automation ; les limites d’objet sont ignorées. Si un client UI Automation récupère le texte à des fins de récitation, d’interprétation ou d’analyse d’une certaine manière, la plage de texte doit être vérifiée pour des cas spéciaux, tels qu’un tableau contenant du contenu textuel ou d’autres objets incorporés. Pour ce faire, appelez GetChildren pour obtenir un AutomationElement objet incorporé, puis appelez-le RangeFromChild pour obtenir une plage de texte pour chaque élément. Cela s’effectue de manière récursive jusqu’à ce que tout le contenu textuel ait été récupéré.

Plages de texte étendues par des objets incorporés. Exemple de flux de texte avec des objets incorporés et leurs étendues de plage

MoveEndpointByUnit reporte la plus grande TextUnit prise en charge suivante si l’élément donné TextUnit n’est pas pris en charge par le contrôle.

L’ordre, de la plus petite unité au plus grand, est répertorié ci-dessous.

S’applique à