Bagikan melalui


TextPatternRange.Move(TextUnit, Int32) Metode

Definisi

Memindahkan rentang teks jumlah unit teks yang ditentukan.

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

Parameter

unit
TextUnit

Batas unit teks.

count
Int32

Jumlah unit teks yang akan dipindahkan. Nilai positif memindahkan rentang teks ke depan, nilai negatif memindahkan rentang teks mundur, dan 0 tidak berpengaruh.

Mengembalikan

Jumlah unit yang benar-benar dipindahkan. Ini bisa kurang dari angka yang diminta jika salah satu titik akhir rentang teks baru lebih besar dari atau kurang dari DocumentRange titik akhir.

Contoh

/// -------------------------------------------------------------------
/// <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

Keterangan

Ketika perlu untuk melintasi konten rentang teks, serangkaian langkah terlibat di belakang layar agar metode Move berhasil dijalankan.

  1. Rentang teks dinormalisasi; yaitu, rentang teks diciutkan menjadi rentang yang merosot di titik akhir Start, yang membuat titik akhir End tidak berguna. Langkah ini diperlukan untuk menghapus ambiguitas dalam situasi di mana rentang teks mencakup unit batas; misalnya, "{U}RL https://www.microsoft.com/ disematkan dalam teks" di mana "{" dan "}" adalah titik akhir rentang teks.

  2. Rentang yang dihasilkan dipindahkan ke belakang di DocumentRange ke awal batas unit yang diminta.

  3. Rentang dipindahkan ke depan atau ke belakang di DocumentRange dengan jumlah batas unit yang diminta.

  4. Rentang kemudian diperluas dari status rentang yang merosot dengan memindahkan titik akhir End dengan satu batas unit yang diminta.

Penyesuaian rentang menurut Pindahkan & penyesuaian Rentang ExpandToEnclosingUnit
Contoh bagaimana rentang teks disesuaikan untuk Move() dan ExpandToEnclosingUnit()

Konten tekstual (atau teks dalam) kontainer teks dan objek yang disematkan, seperti hyperlink atau sel tabel, diekspos sebagai aliran teks berkelanjutan tunggal dalam tampilan kontrol dan tampilan konten pohon Automation UI; batas objek diabaikan. Jika klien UI Automation mengambil teks untuk tujuan membalas, menginterpretasikan, atau menganalisis dengan cara tertentu, rentang teks harus diperiksa untuk kasus khusus, seperti tabel dengan konten tekstual atau objek tersemat lainnya. Ini dapat dicapai dengan memanggil GetChildren untuk mendapatkan AutomationElement untuk setiap objek yang disematkan dan kemudian memanggil RangeFromChild untuk mendapatkan rentang teks untuk setiap elemen; ini dilakukan secara rekursif sampai semua konten tekstual diambil.

Rentang teks dibenamkan oleh objek yang disematkan.
Contoh aliran teks dengan objek yang disematkan dan rentang rentangnya

Move menghormati teks tersembunyi dan terlihat. Klien Automation UI dapat memeriksa IsHiddenAttribute visibilitas teks.

Move menunda ke terbesar TextUnit berikutnya yang didukung jika yang diberikan TextUnit tidak didukung oleh kontrol.

Pesanan, dari unit terkecil hingga terbesar, tercantum di bawah ini.

Catatan

Teks tidak diubah dengan cara apa pun karena rentang teks hanya mencakup bagian teks yang berbeda.

Berlaku untuk

Lihat juga