Cómo trabajar con listas en .NET

Cómo trabajar con listas en .NET

Cómo trabajar con listas en .NET

Las listas numeradas y con viñetas en un documento de Word se construyen a partir de tres objetos cooperantes: List, la definición reutilizable de numeración; ListFormat, que indica a un párrafo específico a qué lista y nivel pertenece; y ListLevel, que contiene el formato real para un nivel. Esta guía muestra cómo aplicar una lista a un párrafo, evitar que listas separadas compartan un contador, mover párrafos entre niveles y personalizar el formato de numeración y viñetas con Aspose.Words FOSS para .NET.


Guía paso a paso

Paso 1: Aplicar una lista a un párrafo

Use ListFormat.ApplyBulletDefault() o ApplyNumberDefault() en el formato de un párrafo para aplicar la viñeta o lista numerada predeterminada de Word en una sola llamada — esta es la forma más rápida de aplicar una lista estándar. Para un formato predefinido específico en lugar del predeterminado, llama a Document.Lists (un ListCollection) .Add(listTemplate) con un valor ListTemplate como BulletDisk, BulletSquare, NumberArabicDot o NumberUppercaseRomanDot para crear un List a partir de uno de los formatos integrados de Word, o AddSingleLevelList(listTemplate) para una variante de un solo nivel. Una vez que un párrafo tiene formato de lista, ListFormat.IsListItem informa true, y ListFormat.List/ListLevelNumber identifican qué lista y nivel utiliza.


Paso 2: Asignar numeración independiente a un nuevo grupo de párrafos

Los párrafos cuyo ListFormat.List apunta al mismo objeto List compartido continúan el mismo contador. Cuando un nuevo grupo de párrafos necesita numeración que reinicie desde 1 de forma independiente, llame a ListCollection.AddCopy(srcList) para duplicar una definición de lista existente, luego aplique la copia a los nuevos párrafos en lugar de reutilizar la original. ListCollection.GetListByListId(listId) recupera una lista específica por su ListId cuando necesita buscar una en lugar de crear una, y Count informa cuántas listas tiene actualmente el documento.


Paso 3: Mover un párrafo entre niveles de lista

Utilice ListFormat.ListIndent() para mover un párrafo un nivel más profundo en su lista, y ListOutdent() para moverlo un nivel más superficial — las mismas operaciones que Word realiza con Tab y Shift+Tab al comienzo de un párrafo de lista. Prefiera estos métodos en lugar de establecer ListLevelNumber directamente, ya que mantienen el formato de lista del párrafo internamente coherente. Llame a RemoveNumbers() para eliminar por completo el formato de lista de un párrafo.


Paso 4: Personalizar el formato de numeración de un nivel de lista

Acceda a un nivel específico mediante List.ListLevels (un ListLevelCollection), luego establezca ListLevel.NumberStyle (un valor NumberStyle como Arabic, UppercaseRoman, LowercaseLetter o Bullet) y NumberFormat — la cadena de formato que combina el número con texto literal como un punto o paréntesis — juntos, ya que una pareja descoordinada produce una representación inesperada. StartAt define el número inicial del nivel, y RestartAfterLevel controla qué incremento de nivel superior reinicia el contador de este nivel — configúrelo explícitamente en listas anidadas en lugar de depender del comportamiento de reinicio predeterminado. Alignment (Left, Center, Right) y TrailingCharacter (Tab, Space, Nothing) controlan la posición de la etiqueta y el separador entre la etiqueta y el texto del párrafo, junto con TabPosition, NumberPosition y TextPosition para un diseño preciso. IsLegal obliga a una numeración al estilo legal (siempre arábiga) sin importar NumberStyle.


Paso 5: Añadir una viñeta de imagen a un nivel de lista

Llame a ListLevel.CreatePictureBullet() en el nivel objetivo para crear una definición de viñeta de imagen, luego proporcione el ImageData de la viñeta antes de eliminar cualquier formato de viñeta de texto existente en el mismo nivel. Llame a DeletePictureBullet() para eliminar una viñeta de imagen y volver al formato de viñeta basado en texto.


Paso 6: Inspeccionar la etiqueta renderizada de un elemento de lista

ListLabel describe la etiqueta realmente renderizada para una instancia de elemento de lista, obtenida desde el formato de párrafo del elemento. LabelString es el texto literal que Word muestra — como “3.” o “•” — LabelValue es el valor numérico subyacente, y Font es el formato propio de la etiqueta, independiente del formato del texto del párrafo. Para calcular el valor de una etiqueta en una posición arbitraria de la secuencia sin renderizar toda la lista, llame a ListLevel.GetEffectiveValue(index, numberStyle, customNumberStyleFormat).


Problemas comunes y soluciones

Dos párrafos que deberían numerarse de forma independiente continúan la misma secuencia. Ambos párrafos’ ListFormat.List se refiere al mismo compartido List objeto. Dale al segundo grupo su propia lista mediante ListCollection.AddCopy(srcList) en lugar de reutilizar el mismo List.

Una cadena de formato de numeración personalizada no se muestra como se esperaba. ListLevel.NumberFormat no coincide con el patrón esperado para el nivel NumberStyle. Verifique NumberFormat and NumberStyle se establecen de forma consistente para el nivel que se está editando.

La sangría de la lista parece incorrecta después de cambiar los niveles programáticamente. ListLevelNumber se estableció directamente sin actualizar las propiedades de posición relacionadas. Utilice ListFormat.ListIndent()/ListOutdent() en lugar de establecer ListLevelNumber directamente.

Una viñeta de imagen no aparece en un nivel. No se creó una viñeta de imagen para ese nivel, o el formato de viñeta de texto predeterminado sigue activo. Call ListLevel.CreatePictureBullet() y proporcione los datos de la imagen antes de eliminar el formato de viñeta de texto.

Una style-linked list no responde a cambios de formato directos. Check List.IsListStyleReference — el formato de una style-referencing list se controla por su linked Style (a través de List.Style), no editando la lista directamente. Comparar con IsListStyleDefinition para distinguir una lista que define su propio formato.


Preguntas frecuentes

¿Cuál es la diferencia entre List y ListFormat?

List es la definición reutilizable de numeración o viñeta compartida entre párrafos. ListFormat es por párrafo — indica cuál List usa un párrafo específico y en qué nivel, a través de ListFormat.List y ListLevelNumber.

¿Cómo puedo comprobar si un párrafo ya forma parte de una lista?

Lea ListFormat.IsListItem sobre el formato del párrafo. Si true, ListFormat.List y ListLevelNumber identifican a qué lista y nivel pertenece.

¿Cómo hago que una lista nueva comience la numeración desde 1 independientemente de una lista existente?

Utilice ListCollection.AddCopy(srcList) para crear una copia independiente de la definición de la lista, y luego aplique la copia a los nuevos párrafos en lugar de reutilizar el List original, que continuaría el mismo contador.

¿Cómo creo una lista con viñetas o numerada desde cero?

Utilice ListFormat.ApplyBulletDefault() o ApplyNumberDefault() para el formato predeterminado de Word, o ListCollection.Add(listTemplate) con un valor ListTemplate para partir de un formato predefinido y personalizar el List.ListLevels resultante a partir de ahí.

¿Cómo obtengo un formato de número como “1)” en lugar de “1.”?

Establezca ListLevel.NumberFormat en el nivel correspondiente a la cadena de formato deseada, junto con NumberStyle para el estilo numeral en sí.


Ver también

 Español