共用方式為


TextPatternRange.MoveEndpointByUnit 方法

定義

在文件範圍內,將文字範圍的一個端點移動指定的 TextUnit 數目。

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

參數

endpoint
TextPatternRangeEndpoint

要移動的端點。

unit
TextUnit

要移動的文字單元。

count
Int32

要移動的單位數。 正計數會將端點向前移動。 負計數會向後移動。 計數為 0 沒有作用。

傳回

實際移動的單元數,如果移動端點會碰到文件的開頭或結尾,則會小於要求的數目。

範例

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

備註

如需周遊文字範圍的內容,則應在幕後執行一連串的步驟,才能成功執行 Move 方法。

  1. 文字範圍已正規化;也就是,文字範圍已在 Start 端點摺疊為變質範圍,以致 End 端點變成多餘的。 在文字範圍跨越 unit 界限的情況下,必須移除模棱兩可的步驟;例如,“{The U}RL https://www.microsoft.com/ 內嵌在文字中”,其中 “{” 和 “}” 是文字範圍端點。

  2. 結果產生的範圍會在 DocumentRange 中向後移至所要求 unit 界限的開頭。

  3. 範圍會接著依一個要求的 End 界限移動 unit 端點,從變質範圍狀態展開。

Move & ExpandToEnclosingUnit
如何針對 Move() 和 ExpandToEnclosingUnit() 調整文字範圍的範例

在 UI 自動化樹狀結構的控制項檢視和內容檢視 (例如超連結或表格儲存格) 中,文字容器和內嵌物件的文字內容 (或內部文字) 會公開為單一連續的文字資料流; 物件界限會被忽略。 如果使用者介面自動化用戶端為了以某種方式進行敘述、解譯或分析而擷取文字,則應檢查特殊案例 (例如具有文字內容或其他內嵌物件的表格) 的文字範圍。 這可以藉由呼叫 GetChildren 來取得 AutomationElement 每個內嵌物件的 ,然後呼叫 RangeFromChild 以取得每個元素的文字範圍;這會以遞歸方式完成,直到擷取所有文字內容為止。

內嵌物件跨越的文字範圍。
具有內嵌物件及其範圍的文字資料流範例

MoveEndpointByUnit如果控件不支援指定的 TextUnit ,則延遲至下一個支援的最大TextUnit值。

從最小單位到最大的順序如下所列。

適用於