Aracılığıyla paylaş


TextPatternRange.Move(TextUnit, Int32) Yöntem

Tanım

Metin aralığını belirtilen sayıda metin birimi taşır.

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

Parametreler

unit
TextUnit

Metin birimi sınırı.

count
Int32

Taşınacak metin birimi sayısı. Pozitif değer metin aralığını ileri taşırken negatif değer metin aralığını geriye taşır ve 0 değerinin hiçbir etkisi olmaz.

Döndürülenler

Gerçekte taşınan birim sayısı. Yeni metin aralığı uç noktalarının biri uç noktalardan büyük veya ondan küçükse bu, istenen sayıdan DocumentRange küçük olabilir.

Örnekler

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

Açıklamalar

Bir metin aralığının içeriğinde geçiş yapmak gerektiğinde, yöntemin başarıyla yürütülmesi için Move arka planda bir dizi adım uygulanır.

  1. Metin aralığı normalleştirilir; yani metin aralığı uç noktadaki bozuk bir aralığa Start daraltılır ve bu da uç noktayı gereksiz hale getirir End . Bu adım, bir metin aralığının sınırları aştığı unit durumlarda belirsizliği kaldırmak için gereklidir; örneğin, "{U}RL https://www.microsoft.com/ metne eklenmiş" ve burada "{" ve "}" metin aralığı uç noktalarıdır.

  2. Sonuçta elde edilen aralık, istenen unit sınırın başına geri DocumentRange taşınır.

  3. Aralık, istenen sınır sayısı unit tarafından içinde DocumentRange ileri veya geri taşınır.

  4. Ardından, uç nokta istenen unit bir sınıra taşınarak aralık bozuk aralık durumundan End genişletilir.

Move & ExpandToEnclosingUnit
Move() ve ExpandToEnclosingUnit() için metin aralığının nasıl ayarlandığına ilişkin örnekler

Bir metin kapsayıcısının metin içeriği (veya iç metni) ve köprü veya tablo hücresi gibi eklenmiş bir nesne, hem denetim görünümünde hem de UI Otomasyonu ağacının içerik görünümünde tek, sürekli metin akışı olarak gösterilir; nesne sınırları yoksayılır. bir UI Otomasyonu istemcisi metni bir şekilde yorumlamak, yorumlamak veya çözümlemek amacıyla alırsa, metin aralığı, metin içeriğine veya diğer eklenmiş nesnelere sahip bir tablo gibi özel durumlar için denetlenmelidir. Bu, her katıştırılmış nesne için bir AutomationElement almak üzere çağrılarak GetChildren ve ardından her öğe için bir metin aralığı elde etmek üzere çağrılarak RangeFromChild gerçekleştirilebilir; bu işlem tüm metin içeriği alınana kadar özyinelemeli olarak yapılır.

Eklenmiş nesneler tarafından yayılan metin aralıkları.
Eklenmiş nesneler ve bunların aralık aralıkları ile metin akışı örneği

Move hem gizli hem de görünür metne saygı gösterir. UI Otomasyonu istemcisi metin görünürlüğünü denetleyebiliyorIsHiddenAttribute.

Moveverilen denetim tarafından desteklenmiyorsa TextUnit sonraki en büyük TextUnit desteklenene saptırılır.

En küçük birimden en büyüğe sipariş aşağıda listelenmiştir.

Not

Metin aralığı metnin farklı bir bölümüne yayıldığından metin hiçbir şekilde değiştirilmez.

Şunlara uygulanır

Ayrıca bkz.