TextPatternRange.MoveEndpointByUnit Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Mueve un punto de conexión del intervalo de texto el número especificado de TextUnits dentro del intervalo de documentos.
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
Parámetros
- endpoint
- TextPatternRangeEndpoint
Punto de conexión que se va a mover.
- unit
- TextUnit
Unidad de texto para mover.
- count
- Int32
Número de unidades que van a moverse. Un recuento positivo mueve el punto de conexión hacia delante. Un recuento negativo se mueve hacia atrás. Un recuento de 0 no tiene ningún efecto.
Devoluciones
Número de unidades que realmente se mueven, que puede ser menor que el número solicitado si el movimiento del punto de conexión se ejecuta al principio o al final del documento.
Ejemplos
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
Comentarios
Cuando es necesario recorrer el contenido de un intervalo de texto, una serie de pasos están implicados en segundo plano para que el Move método se ejecute correctamente.
El intervalo de texto se normaliza; es decir, el intervalo de texto se contrae a un intervalo degenerado en el Start punto de conexión, lo que hace que el End punto de conexión sea superfluo. Este paso es necesario para quitar la ambigüedad en situaciones en las que un intervalo de texto abarca los límites
unit; por ejemplo, "{The U}RL https://www.microsoft.com/ is embedded in text" donde "{" y "}" son los puntos de conexión del intervalo de texto.El intervalo resultante se desplaza hacia atrás en el DocumentRange hasta el principio del límite solicitado
unit.A continuación, el intervalo se expande desde un estado de intervalo degenerado moviendo el extremo End en función de un límite
unitsolicitado.
Ejemplos de cómo se ajusta un intervalo de texto para Move() y ExpandToEnclosingUnit()
El contenido textual (o texto interno) de un contenedor de texto y un objeto incrustado, como un hipervínculo o una celda de tabla, se expone como un único flujo de texto continuo en la vista de control y en la vista de contenido del árbol de automatización de la interfaz de usuario; se omiten los límites de objeto. Si un cliente de Automatización de la interfaz de usuario está recuperando el texto con el fin de recitar, interpretar o analizar de alguna manera, el intervalo de texto debe comprobarse para casos especiales, como una tabla con contenido textual u otros objetos incrustados. Para ello, se puede llamar GetChildren a para obtener un AutomationElement para cada objeto incrustado y, a continuación, llamar RangeFromChild a para obtener un intervalo de texto para cada elemento; esto se realiza de forma recursiva hasta que se haya recuperado todo el contenido textual.
Ejemplo de una secuencia de texto con objetos incrustados y sus intervalos de intervalos
MoveEndpointByUnit se aplaza a la siguiente mayor TextUnit compatibilidad si el control no admite el elemento especificado TextUnit .
El orden, de la unidad más pequeña a la más grande, se muestra a continuación.