Cum să lucraţi cu listele în .NET
Cum să lucrați cu liste în .NET
Listele numerotate și cu marcatori dintr-un document Word sunt construite din trei obiecte cooperante: List, definiția reutilizabilă de numerotare; ListFormat, care indică unui paragraf specific lista și nivelul căruia îi aparține; și ListLevel, care conține formatarea efectivă pentru un nivel. Acest ghid arată cum să aplicați o listă unui paragraf, să împiedicați listele separate să partajeze același contor, să mutați paragrafele între niveluri și să personalizați formatarea numerotării și a marcatorilor cu Aspose.Words FOSS pentru .NET.
Ghid pas cu pas
Pasul 1: Aplicați o listă unui paragraf
Utilizați ListFormat.ApplyBulletDefault() sau ApplyNumberDefault() pe formatarea unui paragraf pentru a aplica lista cu marcatori sau numerotată implicită a Wordului într-un singur apel — aceasta este cea mai rapidă metodă de a aplica o listă standard. Pentru un format predefinit specific în locul celui implicit, apelați Document.Lists (un ListCollection) .Add(listTemplate) cu o valoare ListTemplate precum BulletDisk, BulletSquare, NumberArabicDot sau NumberUppercaseRomanDot pentru a crea un List din unul dintre formatele încorporate ale Wordului, sau AddSingleLevelList(listTemplate) pentru o variantă cu nivel unic. Odată ce un paragraf are formatare de listă, ListFormat.IsListItem raportează true, iar ListFormat.List/ListLevelNumber identifică lista și nivelul pe care le utilizează.
Pasul 2: Atribuiți unui grup nou de paragrafe numerotare independentă
Paragrafele al căror ListFormat.List indică același obiect List partajat continuă același contor. Când un nou grup de paragrafe are nevoie de numerotare care repornește de la 1 independent, apelează ListCollection.AddCopy(srcList) pentru a duplica o definiție de listă existentă, apoi aplică copia la noile paragrafe în loc să reutilizezi originalul. ListCollection.GetListByListId(listId) recuperează o listă specifică prin ListId când trebuie să găsești una în loc să creezi una, și Count raportează câte liste are în prezent documentul.
Pasul 3: Mută un paragraf între nivelurile de listă
Folosește ListFormat.ListIndent() pentru a muta un paragraf cu un nivel mai adânc în lista sa, și ListOutdent() pentru a-l muta cu un nivel mai puțin adânc — aceleași operații pe care le efectuează Word pentru Tab și Shift+Tab la începutul unui paragraf de listă. Preferă aceste metode în loc să setezi ListLevelNumber direct, deoarece păstrează formatul de listă al paragrafului intern coerent. Apelează RemoveNumbers() pentru a elimina complet formatul de listă dintr-un paragraf.
Pasul 4: Personalizează formatul de numerotare al unui nivel de listă
Accesează un nivel specific prin List.ListLevels (un ListLevelCollection), apoi setează ListLevel.NumberStyle (o valoare NumberStyle precum Arabic, UppercaseRoman, LowercaseLetter sau Bullet) și NumberFormat — șirul de format care combină numărul cu text literal, cum ar fi un punct sau o paranteză — împreună, deoarece o pereche necorespunzătoare produce redare neașteptată. StartAt stabilește numărul de pornire al nivelului, iar RestartAfterLevel controlează care increment al nivelului superior repornește contorul acestui nivel — setează-l explicit pe listele imbricate în loc să te bazezi pe comportamentul implicit de repornire. Alignment (Left, Center, Right) și TrailingCharacter (Tab, Space, Nothing) controlează poziția etichetei și separatorul dintre etichetă și textul paragrafului, alături de TabPosition, NumberPosition și TextPosition pentru o dispunere precisă. IsLegal impune numerotarea în stil juridic (întotdeauna arabă) indiferent de NumberStyle.
Pasul 5: Adaugă un glonț imagine la un nivel de listă
Apelează ListLevel.CreatePictureBullet() pe nivelul țintă pentru a crea o definiție de glonț imagine, apoi furnizează ImageData al glonțului înainte de a elimina orice format de glonț text existent pe același nivel. Apelează DeletePictureBullet() pentru a elimina un glonț imagine și a reveni la formatul de glonț bazat pe text.
Pasul 6: Inspectează eticheta redată a unui element de listă
ListLabel descrie eticheta afișată efectiv pentru o instanță a unui element de listă, obținută din formatarea paragrafului elementului. LabelString este textul literal pe care îl afișează Word — cum ar fi „3.” sau „•” — LabelValue este valoarea numerică de bază, iar Font este formatarea proprie a etichetei, independentă de formatarea textului paragrafului. Pentru a calcula valoarea unei etichete la o poziție arbitrară în secvență fără a reda întreaga listă, apelați ListLevel.GetEffectiveValue(index, numberStyle, customNumberStyleFormat).
Probleme comune și remedii
Două paragrafe care ar trebui să fie numerotate independent continuă aceeași secvență. Ambele paragrafe’ ListFormat.List se referă la același partajat List obiect. Oferă celui de-al doilea grup propria listă prin ListCollection.AddCopy(srcList) în loc să reutilizezi același List.
Un șir de format de numerotare personalizat nu se redă așa cum era de așteptat. ListLevel.NumberFormat nu se potrivește cu modelul așteptat pentru nivelul NumberStyle. Verifică NumberFormat and NumberStyle sunt setate în mod consistent pentru nivelul care este editat.
Indentarea listei pare incorectă după schimbarea nivelurilor programatic. ListLevelNumber a fost setat direct fără a actualiza proprietățile de poziție aferente. Utilizați ListFormat.ListIndent()/ListOutdent() în loc de a seta ListLevelNumber direct.
Un bullet imagine nu apare pe un nivel. Nu a fost creat un bullet imagine pentru acel nivel, sau formatarea implicită de bullet text este încă activă. Apelați ListLevel.CreatePictureBullet() și furnizați datele imaginii înainte de a elimina formatarea de bullet text.
O listă legată de stil nu răspunde la modificări directe de formatare. Check List.IsListStyleReference — formatarea unei liste care face referire la stil este controlată de legătura sa Style (via List.Style), nu prin editarea directă a listei. Compară cu IsListStyleDefinition pentru a distinge o listă care își definește propria formatare.
Întrebări frecvente
Care este diferența dintre List și ListFormat?
List este definiția reutilizabilă de numerotare sau marcatori partajată între paragrafe. ListFormat este pe paragraf — indică la ce List folosește un paragraf specific și la ce nivel, prin ListFormat.List și ListLevelNumber.
Cum pot verifica dacă un paragraf face deja parte dintr-o listă?
Citește ListFormat.IsListItem privind formatarea paragrafului. Dacă true, ListFormat.List și ListLevelNumber identifică ce listă și nivel îi aparțin.
Cum pot face ca o listă nouă să înceapă numerotarea de la 1 independent de o listă existentă?
Folosește ListCollection.AddCopy(srcList) pentru a crea o copie independentă a definiției listei, apoi aplică copia la noile paragrafe în loc să reutilizezi List original, care ar continua același contor.
Cum pot crea o listă cu marcatori sau numerotată de la zero?
Utilizaţi ListFormat.ApplyBulletDefault() sau ApplyNumberDefault() pentru formatarea implicită a Word, sau ListCollection.Add(listTemplate) cu o valoare ListTemplate pentru a porni de la un format predefinit şi a personaliza List.ListLevels rezultat de acolo.
Cum pot obține un format de număr ca “1)” în loc de “1.”?
Setaţi ListLevel.NumberFormat la nivelul relevant la şirul de format dorit, alături de NumberStyle pentru stilul numeric în sine.