Condividi tramite


TextPatternRange.MoveEndpointByUnit Metodo

Definizione

Sposta un endpoint dell'intervallo di testo del numero specificato di TextUnit nell'intervallo 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

Parametri

endpoint
TextPatternRangeEndpoint

Endpoint da spostare.

unit
TextUnit

Unità testuale per lo spostamento.

count
Int32

Numero di unità da spostare. Un numero positivo comporta lo spostamento in avanti dell'endpoint. Un numero negativo comporta lo spostamento indietro. Un numero pari a 0 non ha effetto.

Restituisce

Numero di unità effettivamente spostate, che può essere inferiore al numero richiesto se con lo spostamento degli endpoint si raggiunge l'inizio o la fine del documento.

Esempio

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

Commenti

Quando è necessario scorrere il contenuto di un intervallo di testo, per garantire una corretta esecuzione del metodo Move è prevista una serie di passaggi dietro le quinte.

  1. L'intervallo di testo viene normalizzato, ovvero viene compresso in un intervallo degenerato all'endpoint Start . Ciò rende superfluo l'endpoint End . Questo passaggio è necessario per rimuovere ambiguità in situazioni in cui un intervallo di testo si estende unit sui limiti, ad esempio "{La riga di comando U} https://www.microsoft.com/ è incorporata nel testo" dove "{" e "}" sono gli endpoint dell'intervallo di testo.

  2. L'intervallo risultante viene spostato indietro in DocumentRange all'inizio del limite unit richiesto.

  3. L'intervallo viene quindi espanso dallo stato di intervallo degenerato spostando l'endpoint End di un limite unit richiesto.

Regolazioni dell'intervallo per Move & ExpandToEnclosingUnit
Esempi di regolazione di un intervallo di testo per Move() ed ExpandToEnclosingUnit()

Il contenuto testuale (o il testo interno) di un contenitore di testo e di un oggetto incorporato, ad esempio un collegamento ipertestuale o una cella di tabella, viene esposto come un singolo flusso di testo continuo nella visualizzazione di controllo e nella visualizzazione contenuto dell'albero Automazione interfaccia utente; i limiti dell'oggetto vengono ignorati. Se un client di automazione interfaccia utente sta recuperando il testo a scopo di esposizione, interpretazione o analisi, è necessario verificare l'eventuale presenza di casi speciali nell'intervallo di testo, ad esempio una tabella con contenuto testuale o altri oggetti incorporati. Questa operazione può essere eseguita chiamando GetChildren per ottenere un AutomationElement oggetto per ogni oggetto incorporato e quindi chiamando RangeFromChild per ottenere un intervallo di testo per ogni elemento. Questa operazione viene eseguita in modo ricorsivo finché non viene recuperato tutto il contenuto testuale.

Intervalli di testo compresi tra oggetti incorporati.
Esempio di un flusso di testo con oggetti incorporati e le estensioni degli intervalli corrispondenti

MoveEndpointByUnit deferer al successivo più grande TextUnit supportato se l'oggetto specificato TextUnit non è supportato dal controllo.

L'ordine, dalla più piccola unità alla più grande, è elencato di seguito.

Si applica a