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 .
Текстовый диапазон нормализован, т. е. он свернут до вырожденного диапазона в конечной точке Start , что делает конечную точку End избыточной. Этот шаг необходим для устранения неоднозначности в ситуациях, когда текстовый диапазон охватывает границы
unit
; например, "{U}RL https://www.microsoft.com/ внедрен в текст", где "{" и "}" являются конечными точками диапазона текста.Результирующий диапазон перемещается в DocumentRange в начало запрошенной границы
unit
.Затем диапазон расширяется из вырожденного состояния путем перемещения конечной точки End на одну запрошенную границу
unit
.
Примеры корректировки текстового диапазона для Move() и ExpandToEnclosingUnit()
Текстовое содержимое (или внутренний текст) текстового контейнера и внедренного объекта, например гиперссылки или ячейки таблицы, предоставляется в виде единого непрерывного текстового потока как в представлении элемента управления, так и в представлении содержимого дерева модель автоматизации пользовательского интерфейса; границы объектов игнорируются. Если клиент автоматизации пользовательского интерфейса извлекает текст с целью вывода, интерпретации или анализа, текстовый диапазон следует проверить на соответствие особым случаям, например таблице с текстовым содержимым или другим внедренным объектам. Это можно сделать путем вызова GetChildren для получения AutomationElement для каждого внедренного объекта, а затем вызова RangeFromChild для получения текстового диапазона для каждого элемента. Это выполняется рекурсивно, пока не будет извлечено все текстовое содержимое.
Пример текстового потока с внедренными объектами и их диапазонами
MoveEndpointByUnit откладывает до следующего по величине TextUnit поддерживаемого, если заданный TextUnit не поддерживается элементом управления .
Ниже приведен порядок от наименьшей единицы до наибольшего.