Partager via


TextPatternRange.MoveEndpointByUnit Méthode

Définition

Déplace un point de terminaison de la plage de texte du nombre spécifié d'éléments TextUnit dans la plage du document.

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é de texte à déplacer.

count
Int32

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

Retours

Nombre d'unités réellement déplacées, qui peut être inférieur au nombre requis si le déplacement des points de terminaison atteint 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

Quand il est nécessaire de parcourir le contenu d'une plage de texte, il faut effectuer une série d'étapes en arrière-plan pour assurer la bonne exécution de la méthode Move .

  1. La plage de texte est normalisée : elle est réduite en une plage dégénérée au niveau du point de terminaison Start , rendant le point de terminaison End superflu. Cette étape est nécessaire pour supprimer l’ambiguïté dans les situations où une plage de texte dépasse les unit limites ; par exemple, « {L’U}RL https://www.microsoft.com/ est incorporée dans le texte » où « { » et « } » sont les points de terminaison de la plage de texte.

  2. La plage obtenue est déplacée vers l'arrière dans DocumentRange au début de la limite unit demandée.

  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 la façon dont une plage de texte est ajustée 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é en tant que flux de texte unique et continu dans l’affichage de contrôle et l’affichage du contenu de l’arborescence UI Automation. Le contour des objets est ignoré. Si un client UI Automation récupère le texte à des fins de récitation, interprétation ou analyse de quelque façon que ce soit, vous devez vérifier les cas spéciaux de la plage de texte, tels qu’un tableau avec du contenu textuel ou d’autres objets incorporés. Pour ce faire, appelez GetChildren pour obtenir un AutomationElement pour chaque objet incorporé, puis appelez RangeFromChild pour obtenir une plage de texte pour chaque élément ; cela se fait 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 amplitudes

MoveEndpointByUnit passe au plus grand TextUnit suivant pris en charge si le donné TextUnit n’est pas pris en charge par le contrôle.

L’ordre, de la plus petite à la plus grande, est répertorié ci-dessous.

S’applique à