Freigeben über


TextPatternRange.MoveEndpointByUnit Methode

Definition

Verschiebt einen Endpunkt des Textbereichs um die festgelegte Anzahl von TextUnit-Einheiten innerhalb des Dokumentbereichs.

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

Parameter

endpoint
TextPatternRangeEndpoint

Der zu verschiebende Endpunkt.

unit
TextUnit

Die zu verschiebende Texteinheit.

count
Int32

Die Anzahl der zu verschiebenden Einheiten. Eine positive Anzahl verschiebt den Endpunkt vorwärts. Eine negative Anzahl verschiebt diesen rückwärts. Der Anzahl 0 (null) hat keine Auswirkungen.

Gibt zurück

Die Anzahl von Einheiten, um die der Endpunkt tatsächlich verschoben wurde. Diese kann kleiner als die angeforderte Anzahl sein, wenn beim Verschieben des Endpunkts der Anfang bzw. das Ende des Dokuments erreicht wird.

Beispiele

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

Hinweise

Wenn der Inhalt eines Textbereichs durchlaufen werden muss, ist eine Reihe von Hintergrundschritten erforderlich, um die Move -Methode erfolgreich auszuführen.

  1. Der Textbereich ist normalisiert. Dies bedeutet, dass dieser auf einen degenerierten Bereich am Start -Endpunkt reduziert ist, wodurch der End -Endpunkt überflüssig wird. Dieser Schritt ist erforderlich, um Mehrdeutigkeiten in Situationen zu entfernen, in denen sich ein Textbereich über Grenzen erstreckt unit , z. B. "{The U}RL https://www.microsoft.com/ is embedded in text", wobei "{" und "}" die Textbereichsendpunkte sind.

  2. Der resultierende Bereich wird im DocumentRange zurück an den Anfang der angeforderten unit -Grenze verschoben.

  3. Anschließend wird der Bereich von einem degenerierten Bereichszustand erweitert, indem der End -Endpunkt um eine angeforderte unit -Grenze verschoben wird.

Bereichsanpassungen durch Move & ExpandToEnclosingUnit
Beispiele für die Anpassung eines Textbereichs für Move() und ExpandToEnclosingUnit()

Der Textinhalt (oder innere Text) eines Textcontainers und ein eingebettetes Objekt, z. B. ein Link oder eine Tabellenzelle, werden in der Steuerelementansicht und der Inhaltsansicht der Struktur für die Benutzeroberflächenautomatisierung als einzelner, kontinuierlicher Textstream verfügbar gemacht. Objektgrenzen werden dabei ignoriert. Wenn ein Benutzeroberflächenautomatisierungs-Client den Text abruft, um ihn zu lesen, zu interpretieren oder zu analysieren, sollte der Textbereich auf bestimmte Fälle überprüft werden, z. B. auf Tabellen mit Textinhalt oder andere eingebettete Objekte. Dies kann erreicht werden, indem Sie aufrufen GetChildren , um für jedes eingebettete Objekt einen AutomationElement abzurufen, und dann aufrufen RangeFromChild , um einen Textbereich für jedes Element abzurufen. Dies erfolgt rekursiv, bis der gesamte Textinhalt abgerufen wurde.

Textbereiche, die von eingebetteten Objekten überspannt werden.
Beispiel für einen Textstream mit eingebetteten Objekten und deren Bereichsabschnitten

MoveEndpointByUnit wird auf die nächstgrößer TextUnit unterstützte zurückversetzt, wenn die angegebene TextUnit vom -Steuerelement nicht unterstützt wird.

Die Reihenfolge, von der kleinsten Einheit bis zur größten, ist unten aufgeführt.

Gilt für: