Compartilhar via


TextPatternRange.MoveEndpointByUnit Método

Definição

Move um ponto de extremidade do intervalo de texto conforme o número especificado de TextUnits dentro do intervalo do 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

O ponto de extremidade a ser movido.

unit
TextUnit

A unidade textual para mover.

count
Int32

O número de unidades a serem movidas. Uma contagem positiva move o ponto de extremidade para frente. Uma contagem negativa move para trás. Uma contagem de 0 não tem nenhum efeito.

Retornos

O número de unidades realmente movidos, que pode ser menor que o número solicitado se mover que o ponto de extremidade é executado no início ou no final do documento.

Exemplos

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

Comentários

Quando é necessário percorrer o conteúdo de um intervalo de texto, uma série de etapas são envolvidas nos bastidores para que o método Move seja executado com êxito.

  1. O intervalo de texto é normalizado; ou seja, ele é recolhido a um intervalo degenerado no ponto de extremidade Start, o que torna o ponto de extremidade End supérfluo. Esta etapa é necessária para remover a ambiguidade em situações em que um intervalo de texto abrange unit limites; por exemplo, "{A U}RL https://www.microsoft.com/ está inserida no texto" em que "{" e "}" são os pontos de extremidade do intervalo de texto.

  2. O intervalo resultante é movido para trás no DocumentRange para o início do limite unit solicitado.

  3. Em seguida, o intervalo é expandido de um estado de intervalo degenerado movendo o ponto de extremidade End um limite unit solicitado.

Ajustes de intervalo por Move & ExpandToEnclosingUnit
Exemplos de como um intervalo de texto é ajustado para Move() e ExpandToEnclosingUnit()

O conteúdo textual (ou texto interno) de um contêiner de texto e um objeto inserido, como um hiperlink ou célula de tabela, é exposto como um só fluxo de texto contínuo na exibição de controle e na exibição de conteúdo da árvore de Automação da Interface do Usuário; os limites de objeto são ignorados. Se um cliente da Automação da Interface do Usuário estiver recuperando o texto com a finalidade de recitar, interpretar ou analisá-lo de alguma forma, o intervalo de texto deverá ser verificado para casos especiais, como uma tabela com conteúdo textual ou outros objetos inseridos. Isso pode ser feito chamando GetChildren para obter um AutomationElement para cada objeto inserido e, em seguida, chamando RangeFromChild para obter um intervalo de texto para cada elemento; isso é feito recursivamente até que todo o conteúdo textual seja recuperado.

Intervalos de texto estendidos por objetos inseridos.
Exemplo de um fluxo de texto com objetos inseridos e seus intervalos

MoveEndpointByUnit adiará para o próximo maior TextUnit com suporte se o determinado TextUnit não tiver suporte do controle .

A ordem, da menor unidade para a maior, está listada abaixo.

Aplica-se a