Sdílet prostřednictvím


TextPatternRange.Move(TextUnit, Int32) Metoda

Definice

Přesune rozsah textu na zadaný počet textových jednotek.

public:
 int Move(System::Windows::Automation::Text::TextUnit unit, int count);
public int Move (System.Windows.Automation.Text.TextUnit unit, int count);
member this.Move : System.Windows.Automation.Text.TextUnit * int -> int
Public Function Move (unit As TextUnit, count As Integer) As Integer

Parametry

unit
TextUnit

Hranice textové jednotky.

count
Int32

Počet textových jednotek, které se mají přesunout. Kladná hodnota přesune oblast textu dopředu, záporná hodnota posune oblast textu dozadu a hodnota 0 nemá žádný vliv.

Návraty

Počet skutečně přesunutých jednotek To může být menší než požadované číslo, pokud je některý z nových koncových bodů textového rozsahu DocumentRange větší než nebo menší než koncové body.

Příklady

/// -------------------------------------------------------------------
/// <summary>
/// Starts the target application and returns the AutomationElement 
/// obtained from the targets window handle.
/// </summary>
/// <param name="exe">
/// The target application.
/// </param>
/// <param name="filename">
/// The text file to be opened in the target application
/// </param>
/// <returns>
/// An AutomationElement representing the target application.
/// </returns>
/// -------------------------------------------------------------------
private AutomationElement StartTarget(string exe, string filename)
{
    // Start text editor and load with a text file.
    Process p = Process.Start(exe, filename);

    // targetApp --> the root AutomationElement.
    AutomationElement targetApp =
        AutomationElement.FromHandle(p.MainWindowHandle);

    return targetApp;
}
''' -------------------------------------------------------------------
''' <summary>
''' Starts the target application and returns the AutomationElement 
''' obtained from the targets window handle.
''' </summary>
''' <param name="exe">
''' The target application.
''' </param>
''' <param name="filename">
''' The text file to be opened in the target application
''' </param>
''' <returns>
''' An AutomationElement representing the target application.
''' </returns>
''' -------------------------------------------------------------------
Private Function StartTarget( _
ByVal exe As String, ByVal filename As String) As AutomationElement
    ' Start text editor and load with a text file.
    Dim p As Process = Process.Start(exe, filename)

    ' targetApp --> the root AutomationElement.
    Dim targetApp As AutomationElement
    targetApp = AutomationElement.FromHandle(p.MainWindowHandle)

    Return targetApp
End Function
/// -------------------------------------------------------------------
/// <summary>
/// Obtain the text control of interest from the target application.
/// </summary>
/// <param name="targetApp">
/// The target application.
/// </param>
/// <returns>
/// An AutomationElement that represents a text provider..
/// </returns>
/// -------------------------------------------------------------------
private AutomationElement GetTextElement(AutomationElement targetApp)
{
    // The control type we're looking for; in this case 'Document'
    PropertyCondition cond1 =
        new PropertyCondition(
        AutomationElement.ControlTypeProperty,
        ControlType.Document);

    // The control pattern of interest; in this case 'TextPattern'.
    PropertyCondition cond2 = 
        new PropertyCondition(
        AutomationElement.IsTextPatternAvailableProperty, 
        true);

    AndCondition textCondition = new AndCondition(cond1, cond2);

    AutomationElement targetTextElement =
        targetApp.FindFirst(TreeScope.Descendants, textCondition);

    // If targetText is null then a suitable text control was not found.
    return targetTextElement;
}
''' -------------------------------------------------------------------
''' <summary>
''' Obtain the text control of interest from the target application.
''' </summary>
''' <param name="targetApp">
''' The target application.
''' </param>
''' <returns>
''' An AutomationElement. representing a text control.
''' </returns>
''' -------------------------------------------------------------------
Private Function GetTextElement(ByVal targetApp As AutomationElement) As AutomationElement
    ' The control type we're looking for; in this case 'Document'
    Dim cond1 As PropertyCondition = _
        New PropertyCondition( _
        AutomationElement.ControlTypeProperty, _
        ControlType.Document)

    ' The control pattern of interest; in this case 'TextPattern'.
    Dim cond2 As PropertyCondition = _
        New PropertyCondition( _
        AutomationElement.IsTextPatternAvailableProperty, _
        True)

    Dim textCondition As AndCondition = New AndCondition(cond1, cond2)

    Dim targetTextElement As AutomationElement = _
        targetApp.FindFirst(TreeScope.Descendants, textCondition)

    ' If targetText is null then a suitable text control was not found.
    Return targetTextElement
End Function
/// -------------------------------------------------------------------
/// <summary>
/// Moves a text range a specified number of text units. The text range 
/// is the current selection.
/// </summary>
/// <param name="targetTextElement">
/// The AutomationElment that represents a text control.
/// </param>
/// <param name="textUnit">
/// The text unit value.
/// </param>
/// <param name="units">
/// The number of text units to move.
/// </param>
/// <param name="direction">
/// Direction to move the text range. Valid values are -1, 0, 1.
/// </param>
/// <returns>
/// The number of text units actually moved. This can be less than the 
/// number requested if either of the new text range endpoints is 
/// greater than or less than the DocumentRange endpoints. 
/// </returns>
/// <remarks>
/// Moving the text range does not modify the text source in any way. 
/// Only the text range starting and ending endpoints are modified.
/// </remarks>
/// -------------------------------------------------------------------
private Int32 MoveSelection(
    AutomationElement targetTextElement, 
    TextUnit textUnit,
    int units,
    int direction)
{
    TextPattern textPattern =
        targetTextElement.GetCurrentPattern(TextPattern.Pattern) 
        as TextPattern;

    if (textPattern == null)
    {
        // Target control doesn't support TextPattern.
        return -1;
    }

    TextPatternRange[] currentSelection = textPattern.GetSelection();

    if (currentSelection.Length > 1)
    {
        // For this example, we cannot move more than one text range.
        return -1;
    }

    return currentSelection[0].Move(textUnit, Math.Sign(direction) * units);
}
''' -------------------------------------------------------------------
''' <summary>
''' Moves a text range a specified number of text units.
''' </summary>
''' <param name="targetTextElement">
''' The AutomationElement that represents a text control.
''' </param>
''' <param name="textUnit">
''' The text unit value.
''' </param>
''' <param name="units">
''' The number of text units to move.
''' </param>
''' <param name="direction">
''' Direction to move the text range. Valid values are -1, 0, 1.
''' </param>
''' <returns>
''' The number of text units actually moved. This can be less than the 
''' number requested if either of the new text range endpoints is 
''' greater than or less than the DocumentRange endpoints. 
''' </returns>
''' <remarks>
''' Moving the text range does not modify the text source in any way. 
''' Only the text range starting and ending endpoints are modified.
''' </remarks>
''' -------------------------------------------------------------------
Private Function MoveSelection( _
    ByVal targetTextElement As AutomationElement, _
    ByVal textUnit As TextUnit, _
    ByVal units As Integer, _
    ByVal direction As Integer) As Integer

    Dim textPattern As TextPattern = _
    DirectCast( _
    targetTextElement.GetCurrentPattern(textPattern.Pattern), _
    TextPattern)

    If (textPattern Is Nothing) Then
        ' Target control doesn't support TextPattern.
        Return -1
    End If

    Dim currentSelection As TextPatternRange() = _
    textPattern.GetSelection()

    If (currentSelection.Length > 1) Then
        ' For this example, we cannot move more than one text range.
        Return -1
    End If

    Return currentSelection(0).Move(textUnit, Math.Sign(direction) * units)
End Function

Poznámky

Pokud je nutné procházet obsah textového rozsahu, je na pozadí zapojena řada kroků, Move aby se metoda úspěšně spustila.

  1. Rozsah textu je normalizován; to znamená, že oblast textu je na koncovém bodu sbalená do degenerovaného rozsahu StartEnd , takže koncový bod je nadbytečný. Tento krok je nezbytný k odstranění nejednoznačnosti v situacích, kdy rozsah textu přesahuje unit hranice, například {seznam U}RL https://www.microsoft.com/ je vložený do textu, kde {a } jsou koncové body oblasti textu.

  2. Výsledný rozsah se přesune dozadu DocumentRange na začátek požadovaného ohraničení unit .

  3. Rozsah je posunut dopředu nebo dozadu v DocumentRange požadovaném počtu unit hranic.

  4. Oblast se pak rozbalí ze stavu degenerovaného rozsahu přesunutím koncového End bodu o jednu požadovanou unit hranici.

Úpravy rozsahu pomocí Funkce Přesunout & Úpravy rozsahu Rozbalit NaEnclosingUnit
Příklady úprav rozsahu textu pro Move() a ExpandToEnclosingUnit()

Textový obsah (nebo vnitřní text) textového kontejneru a vloženého objektu, jako je hypertextový odkaz nebo buňka tabulky, je vystaven jako jeden souvislý textový proud v zobrazení ovládacího prvku i v zobrazení obsahu stromu model UI Automation; hranice objektů jsou ignorovány. Pokud klient model UI Automation načítá text za účelem recitování, interpretace nebo analýzy nějakým způsobem, měl by být rozsah textu zkontrolován pro zvláštní případy, jako je tabulka s textovým obsahem nebo jiné vložené objekty. Toho lze dosáhnout voláním GetChildren pro získání objektu AutomationElement pro každý vložený objekt a následným voláním RangeFromChild pro získání rozsahu textu pro každý prvek; to se provádí rekurzivně, dokud nebude načten veškerý textový obsah.

Textové oblasti rozložené vloženými objekty.
Příklad textového streamu s vloženými objekty a jejich rozsahy

Move respektuje skrytý i viditelný text. Klient model UI Automation může zkontrolovat IsHiddenAttribute viditelnost textu.

Movepokud daný TextUnit ovládací prvek nepodporuje, na další největší TextUnit podporovanou hodnotu.

Pořadí od nejmenších jednotek po největší je uvedené níže.

Poznámka

Text se nijak nezmění, protože rozsah textu pouze překlenuje jinou část textu.

Platí pro

Viz také