Udostępnij za pośrednictwem


TextPatternRange.MoveEndpointByUnit Metoda

Definicja

Przenosi jeden punkt końcowy zakresu tekstu o określonej liczbie TextUnits w zakresie dokumentów.

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

Parametry

endpoint
TextPatternRangeEndpoint

Punkt końcowy do przeniesienia.

unit
TextUnit

Jednostka tekstowa do przenoszenia.

count
Int32

Liczba jednostek do przeniesienia. Liczba dodatnia przenosi punkt końcowy do przodu. Ujemna liczba przechodzi do tyłu. Liczba 0 nie ma wpływu.

Zwraca

Liczba jednostek rzeczywiście przeniesionych, która może być mniejsza niż liczba żądana, jeśli przeniesienie punktu końcowego zostanie uruchomione na początku lub na końcu dokumentu.

Przykłady

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

Uwagi

Gdy konieczne jest przejście przez zawartość zakresu tekstu, seria kroków jest zaangażowana w tle, aby Move metoda została wykonana pomyślnie.

  1. Zakres tekstu jest znormalizowany; oznacza to, że zakres tekstu jest zwinięty do zdegenerowanego zakresu w Start punkcie końcowym, co sprawia, że End punkt końcowy jest zbędny. Ten krok jest niezbędny do usunięcia niejednoznaczności w sytuacjach, w których zakres tekstu obejmuje unit granice, na przykład "{U}RL https://www.microsoft.com/ jest osadzony w tekście", gdzie "{" i "}" są punktami końcowymi zakresu tekstu.

  2. Wynikowy zakres jest przenoszony do DocumentRange tyłu na początku żądanej unit granicy.

  3. Zakres jest następnie rozszerzany z zdegenerowanego stanu zakresu przez przeniesienie End punktu końcowego przez jedną żądaną unit granicę.

Korekty zakresu według opcji Move & ExpandToEnclosingUnit
Przykłady dostosowania zakresu tekstu dla funkcji Move() i ExpandToEnclosingUnit()

Zawartość tekstowa (lub tekst wewnętrzny) kontenera tekstowego i osadzonego obiektu, takiego jak hiperlink lub komórka tabeli, jest uwidoczniona jako pojedynczy, ciągły strumień tekstowy zarówno w widoku kontrolki, jak i widoku zawartości drzewa automatyzacja interfejsu użytkownika; granice obiektów są ignorowane. Jeśli klient automatyzacja interfejsu użytkownika pobiera tekst na potrzeby recytowania, interpretowania lub analizowania w jakiś sposób, zakres tekstu powinien być sprawdzany w specjalnych przypadkach, takich jak tabela z zawartością tekstową lub innymi obiektami osadzonymi. Można to osiągnąć przez wywołanie w GetChildren celu uzyskania elementu AutomationElement dla każdego osadzonego obiektu, a następnie wywołanie w RangeFromChild celu uzyskania zakresu tekstu dla każdego elementu. Odbywa się to cyklicznie do momentu pobrania całej zawartości tekstowej.

Zakresy tekstu rozciągane przez obiekty osadzone.
Przykład strumienia tekstu z osadzonymi obiektami i zakresami ich zakresów

MoveEndpointByUnit defers do następnego największego TextUnit obsługiwanego, jeśli dana wartość TextUnit nie jest obsługiwana przez kontrolkę.

Kolejność, od najmniejszej jednostki do największej, znajduje się poniżej.

Dotyczy