Come lavorare con le liste in .NET
Come lavorare con le liste in .NET
Gli elenchi numerati e puntati in un documento Word sono costruiti da tre oggetti cooperanti: List, la definizione riutilizzabile della numerazione; ListFormat, che indica a un paragrafo specifico a quale elenco e livello appartiene; e ListLevel, che contiene la formattazione effettiva per un livello. Questa guida mostra come applicare un elenco a un paragrafo, impedire che elenchi separati condividano lo stesso contatore, spostare i paragrafi tra i livelli e personalizzare la numerazione e la formattazione dei punti con Aspose.Words FOSS per .NET.
Guida passo-passo
Passo 1: Applicare un elenco a un paragrafo
Usa ListFormat.ApplyBulletDefault() o ApplyNumberDefault() sulla formattazione di un paragrafo per applicare l’elenco puntato o numerato predefinito di Word in un’unica chiamata — questo è il modo più rapido per applicare un elenco standard. Per un formato predefinito specifico invece del predefinito, chiama Document.Lists (un ListCollection) .Add(listTemplate) con un valore ListTemplate come BulletDisk, BulletSquare, NumberArabicDot o NumberUppercaseRomanDot per creare un List da uno dei formati integrati di Word, o AddSingleLevelList(listTemplate) per una variante a livello singolo. Una volta che un paragrafo ha la formattazione dell’elenco, ListFormat.IsListItem segnala true, e ListFormat.List/ListLevelNumber identificano quale elenco e livello utilizza.
Passo 2: Assegnare a un nuovo gruppo di paragrafi una numerazione indipendente
I paragrafi il cui ListFormat.List punta allo stesso oggetto List condiviso continuano lo stesso contatore. Quando un nuovo gruppo di paragrafi richiede una numerazione che ricomincia da 1 in modo indipendente, chiama ListCollection.AddCopy(srcList) per duplicare una definizione di elenco esistente, quindi applica la copia ai nuovi paragrafi invece di riutilizzare l’originale. ListCollection.GetListByListId(listId) recupera un elenco specifico tramite il suo ListId quando è necessario trovarne uno anziché crearne uno, e Count segnala quante liste ha attualmente il documento.
Passo 3: Sposta un paragrafo tra i livelli dell’elenco
Usa ListFormat.ListIndent() per spostare un paragrafo di un livello più in profondità nella sua lista, e ListOutdent() per spostarlo di un livello più in alto — le stesse operazioni che Word esegue con Tab e Shift+Tab all’inizio di un paragrafo di elenco. Preferisci questi metodi rispetto all’impostazione diretta di ListLevelNumber, poiché mantengono la formattazione dell’elenco del paragrafo coerente internamente. Chiama RemoveNumbers() per rimuovere completamente la formattazione dell’elenco da un paragrafo.
Passo 4: Personalizza il formato di numerazione di un livello dell’elenco
Raggiungi un livello specifico tramite List.ListLevels (un ListLevelCollection), quindi imposta ListLevel.NumberStyle (un valore NumberStyle come Arabic, UppercaseRoman, LowercaseLetter o Bullet) e NumberFormat — la stringa di formato che combina il numero con testo letterale come un punto o una parentesi — insieme, poiché una coppia non corrispondente produce un rendering inatteso. StartAt imposta il numero di partenza del livello, e RestartAfterLevel controlla quale incremento del livello superiore riavvia il contatore di questo livello — impostalo esplicitamente nelle liste nidificate anziché fare affidamento sul comportamento di riavvio predefinito. Alignment (Left, Center, Right) e TrailingCharacter (Tab, Space, Nothing) controllano la posizione dell’etichetta e il separatore tra l’etichetta e il testo del paragrafo, insieme a TabPosition, NumberPosition e TextPosition per una disposizione precisa. IsLegal forza la numerazione in stile legale (sempre arabo) indipendentemente da NumberStyle.
Passo 5: Aggiungi un bullet immagine a un livello dell’elenco
Chiama ListLevel.CreatePictureBullet() sul livello di destinazione per creare una definizione di bullet immagine, quindi fornisci il ImageData del bullet prima di rimuovere qualsiasi formattazione di bullet testuale esistente nello stesso livello. Chiama DeletePictureBullet() per rimuovere un bullet immagine e tornare alla formattazione di bullet basata su testo.
Passo 6: Ispeziona l’etichetta renderizzata di un elemento dell’elenco
ListLabel descrive l’etichetta effettivamente renderizzata per un’istanza di elemento dell’elenco, ottenuta dalla formattazione del paragrafo dell’elemento. LabelString è il testo letterale visualizzato da Word — come “3.” o “•” — LabelValue è il valore numerico sottostante, e Font è la formattazione propria dell’etichetta, indipendente dalla formattazione del testo del paragrafo. Per calcolare il valore di un’etichetta in una posizione arbitraria della sequenza senza renderizzare l’intero elenco, chiama ListLevel.GetEffectiveValue(index, numberStyle, customNumberStyleFormat).
Problemi comuni e soluzioni
Due paragrafi che dovrebbero numerarsi indipendentemente continuano la stessa sequenza. Entrambi i paragrafi’ ListFormat.List fa riferimento allo stesso condiviso List oggetto. Assegna al secondo gruppo la propria lista tramite ListCollection.AddCopy(srcList) invece di riutilizzare lo stesso List.
Una stringa di formato di numerazione personalizzata non viene renderizzata come previsto. ListLevel.NumberFormat non corrisponde al modello previsto per il livello NumberStyle. Verifica NumberFormat and NumberStyle sono impostati in modo coerente per il livello in fase di modifica.
L’indentazione dell’elenco sembra errata dopo aver modificato i livelli programmaticamente. ListLevelNumber è stato impostato direttamente senza aggiornare le proprietà di posizione correlate. Usa ListFormat.ListIndent()/ListOutdent() invece di impostare ListLevelNumber direttamente.
Un picture bullet non appare su un livello. Nessun picture bullet è stato creato per quel livello, o la formattazione predefinita del text-bullet è ancora attiva. Chiama ListLevel.CreatePictureBullet() e fornisci i dati dell’immagine prima di rimuovere la formattazione del text bullet.
Un elenco collegato a uno stile non risponde alle modifiche di formattazione dirette. Check List.IsListStyleReference — la formattazione di un elenco che fa riferimento a uno stile è controllata dal suo collegamento Style (via List.Style), non modificando direttamente l’elenco. Confronta con IsListStyleDefinition per distinguere un elenco che definisce la propria formattazione.
Domande Frequenti
Qual è la differenza tra List e ListFormat?
List è la definizione riutilizzabile di numerazione o elenco puntato condivisa tra i paragrafi. ListFormat è per paragrafo — indica quale List usa un paragrafo specifico e a quale livello, tramite ListFormat.List e ListLevelNumber.
Come verifico se un paragrafo fa già parte di un elenco?
Leggi ListFormat.IsListItem sulla formattazione del paragrafo. Se true, ListFormat.List e ListLevelNumber identificano a quale elenco e livello appartiene.
Come faccio a far partire la numerazione di un nuovo elenco da 1 in modo indipendente da un elenco esistente?
Usa ListCollection.AddCopy(srcList) per creare una copia indipendente della definizione dell’elenco, quindi applica la copia ai nuovi paragrafi anziché riutilizzare il List originale, che continuerebbe lo stesso contatore.
Come creo un elenco puntato o numerato da zero?
Usa ListFormat.ApplyBulletDefault() o ApplyNumberDefault() per la formattazione predefinita di Word, oppure ListCollection.Add(listTemplate) con un valore ListTemplate per partire da un formato predefinito e personalizzare il List.ListLevels risultante.
Come posso ottenere un formato numerico come “1)” invece di “1.”?
Imposta ListLevel.NumberFormat al livello pertinente con la stringa di formato desiderata, insieme a NumberStyle per lo stile del numero stesso.