TextPatternRange.MoveEndpointByUnit Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Flyttar en slutpunkt i textområdet det angivna antalet TextUnits inom dokumentintervallet.
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
Parametrar
- endpoint
- TextPatternRangeEndpoint
Slutpunkten som ska flyttas.
- unit
- TextUnit
Textenheten för att flytta.
- count
- Int32
Antalet enheter som ska flyttas. Ett positivt antal flyttar slutpunkten framåt. Ett negativt antal flyttas bakåt. Antalet 0 har ingen effekt.
Returer
Antalet enheter som faktiskt har flyttats, vilket kan vara mindre än det begärda antalet om en flytt av slutpunkten går till början eller slutet av dokumentet.
Exempel
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
Kommentarer
När det är nödvändigt att bläddra igenom innehållet i ett textintervall är en serie steg inblandade i bakgrunden för att metoden Move ska kunna köras korrekt.
Textområdet normaliseras. Det innebär att textintervallet minimeras till ett degenererat intervall vid Start slutpunkten, vilket gör End slutpunkten överflödig. Det här steget är nödvändigt för att ta bort tvetydighet i situationer där ett textintervall sträcker sig över
unitgränser, till exempel "{U}RL https://www.microsoft.com/ är inbäddad i text" där "{" och "}" är slutpunkterna för textintervallet.Det resulterande intervallet flyttas bakåt genom DocumentRange till början av den begärda
unitgränsen.Intervallet expanderas sedan från ett degenererat intervalltillstånd genom att slutpunkten End flyttas med en begärd
unitgräns.
Exempel på hur ett textintervall justeras för Move() och ExpandToEnclosingUnit()
Textinnehållet (eller den inre texten) i en textcontainer och ett inbäddat objekt, till exempel en hyperlänk eller tabellcell, exponeras som en enda kontinuerlig textström i både kontrollvyn och innehållsvyn i UI Automation-trädet. objektgränser ignoreras. Om en UI Automation-klient hämtar texten i syfte att recitera, tolka eller analysera på något sätt, bör textintervallet kontrolleras för särskilda fall, till exempel en tabell med textinnehåll eller andra inbäddade objekt. Detta kan åstadkommas genom att anropa GetChildren för att hämta ett AutomationElement för varje inbäddat objekt och sedan anropa RangeFromChild för att hämta ett textintervall för varje element. Detta görs rekursivt tills allt textinnehåll har hämtats.
Exempel på en textström med inbäddade objekt och deras intervallintervall
MoveEndpointByUnit defers till den näst största TextUnit som stöds om den angivna TextUnit inte stöds av kontrollen.
Ordningen, från den minsta enheten till den största, visas nedan.