Cách làm việc với danh sách trong .NET

Cách làm việc với danh sách trong .NET

Cách làm việc với danh sách trong .NET

Các danh sách đánh số và có dấu chấm trong tài liệu Word được xây dựng từ ba đối tượng hợp tác: List, định nghĩa đánh số có thể tái sử dụng; ListFormat, cho biết một đoạn văn cụ thể thuộc danh sách và cấp độ nào; và ListLevel, chứa định dạng thực tế cho một cấp độ. Hướng dẫn này chỉ ra cách áp dụng danh sách vào một đoạn văn, giữ các danh sách riêng biệt không chia sẻ bộ đếm, di chuyển các đoạn văn giữa các cấp độ, và tùy chỉnh định dạng đánh số và dấu chấm bằng Aspose.Words FOSS cho .NET.


Hướng dẫn từng bước

Bước 1: Áp dụng danh sách vào một đoạn văn

Sử dụng ListFormat.ApplyBulletDefault() hoặc ApplyNumberDefault() trên định dạng của một đoạn văn để áp dụng danh sách dấu chấm hoặc đánh số mặc định của Word trong một lần gọi — đây là cách nhanh nhất để áp dụng danh sách tiêu chuẩn. Đối với một định dạng đã được định nghĩa sẵn cụ thể thay vì mặc định, gọi Document.Lists (một ListCollection) .Add(listTemplate) với giá trị ListTemplate như BulletDisk, BulletSquare, NumberArabicDot, hoặc NumberUppercaseRomanDot để tạo một List từ một trong các định dạng tích hợp của Word, hoặc AddSingleLevelList(listTemplate) cho một biến thể một cấp độ. Khi một đoạn văn có định dạng danh sách, ListFormat.IsListItem báo cáo true, và ListFormat.List/ListLevelNumber xác định danh sách và cấp độ mà nó sử dụng.


Bước 2: Cung cấp cho một nhóm đoạn văn mới việc đánh số độc lập

Các đoạn văn mà ListFormat.List chỉ tới cùng một đối tượng List chung sẽ tiếp tục cùng bộ đếm. Khi một nhóm đoạn mới cần đánh số lại từ 1 một cách độc lập, gọi ListCollection.AddCopy(srcList) để sao chép một định nghĩa danh sách hiện có, sau đó áp dụng bản sao cho các đoạn mới thay vì sử dụng lại bản gốc. ListCollection.GetListByListId(listId) lấy một danh sách cụ thể bằng ListId khi bạn cần tra cứu thay vì tạo mới, và Count báo cáo số lượng danh sách hiện có trong tài liệu.


Bước 3: Di chuyển một đoạn văn giữa các cấp danh sách

Sử dụng ListFormat.ListIndent() để di chuyển một đoạn văn sâu hơn một cấp trong danh sách, và ListOutdent() để di chuyển nó lên một cấp — các thao tác tương tự mà Word thực hiện khi nhấn Tab và Shift+Tab ở đầu một đoạn danh sách. Ưu tiên các phương pháp này hơn việc đặt ListLevelNumber trực tiếp, vì chúng giữ định dạng danh sách của đoạn văn nhất quán nội bộ. Gọi RemoveNumbers() để loại bỏ hoàn toàn định dạng danh sách khỏi một đoạn văn.


Bước 4: Tùy chỉnh Định dạng Đánh số của Cấp danh sách

Tiếp cận một cấp cụ thể thông qua List.ListLevels (một ListLevelCollection), sau đó đặt ListLevel.NumberStyle (một giá trị NumberStyle như Arabic, UppercaseRoman, LowercaseLetter, hoặc Bullet) và NumberFormat — chuỗi định dạng kết hợp số với văn bản cố định như dấu chấm hoặc ngoặc — cùng nhau, vì một cặp không khớp sẽ tạo ra việc hiển thị không mong muốn. StartAt đặt số bắt đầu của cấp, và RestartAfterLevel kiểm soát cấp cao hơn nào sẽ làm lại bộ đếm của cấp này — hãy đặt nó một cách rõ ràng trên các danh sách lồng nhau thay vì dựa vào hành vi khởi động lại mặc định. Alignment (Left, Center, Right) và TrailingCharacter (Tab, Space, Nothing) kiểm soát vị trí nhãn và ký tự phân tách giữa nhãn và văn bản đoạn, cùng với TabPosition, NumberPosition, và TextPosition để bố trí chính xác. IsLegal buộc định dạng đánh số kiểu pháp lý (luôn là Arabic) bất kể NumberStyle.


Bước 5: Thêm một dấu đầu dòng ảnh vào Cấp danh sách

Gọi ListLevel.CreatePictureBullet() trên cấp mục tiêu để tạo định nghĩa dấu đầu dòng ảnh, sau đó cung cấp ImageData của dấu đầu dòng trước khi xóa bất kỳ định dạng dấu đầu dòng văn bản nào hiện có trên cùng cấp. Gọi DeletePictureBullet() để xóa dấu đầu dòng ảnh và quay lại định dạng dấu đầu dòng dạng văn bản.


Bước 6: Kiểm tra Nhãn đã hiển thị của Mục danh sách

ListLabel mô tả nhãn thực tế được hiển thị cho một mẫu mục danh sách, được lấy từ định dạng đoạn văn của mục. LabelString là văn bản nguyên gốc mà Word hiển thị — chẳng hạn như “3.” hoặc “•” — LabelValue là giá trị số cơ bản, và Font là định dạng riêng của nhãn, độc lập với định dạng đoạn văn bản. Để tính giá trị của nhãn tại một vị trí bất kỳ trong chuỗi mà không cần hiển thị toàn bộ danh sách, hãy gọi ListLevel.GetEffectiveValue(index, numberStyle, customNumberStyleFormat).


Các vấn đề thường gặp và cách khắc phục

Hai đoạn văn nên đánh số độc lập tiếp tục cùng một chuỗi. Cả hai đoạn văn’ ListFormat.List đề cập đến cùng một List đối tượng. Cung cấp cho nhóm thứ hai danh sách riêng qua ListCollection.AddCopy(srcList) thay vì tái sử dụng cùng một List.

Chuỗi định dạng đánh số tùy chỉnh không hiển thị như mong đợi. ListLevel.NumberFormat không khớp với mẫu mong đợi cho cấp độ của NumberStyle. Xác minh NumberFormat and NumberStyle được đặt nhất quán cho cấp độ đang được chỉnh sửa.

Khoảng thụt lề danh sách trông sai sau khi thay đổi cấp độ bằng chương trình. ListLevelNumber được đặt trực tiếp mà không cập nhật các thuộc tính vị trí liên quan. Sử dụng ListFormat.ListIndent()/ListOutdent() thay vì đặt ListLevelNumber trực tiếp.

Một dấu đầu dòng hình ảnh không hiển thị trên cấp độ. Không có dấu đầu dòng hình ảnh nào được tạo cho cấp độ đó, hoặc định dạng dấu đầu dòng văn bản mặc định vẫn đang hoạt động. Gọi ListLevel.CreatePictureBullet() và cung cấp dữ liệu hình ảnh trước khi xóa định dạng dấu đầu dòng văn bản.

Một danh sách được liên kết kiểu không phản hồi với các thay đổi định dạng trực tiếp. Check List.IsListStyleReference — định dạng của danh sách tham chiếu kiểu được kiểm soát bởi danh sách được liên kết của nó Style (qua List.Style), không phải bằng cách chỉnh sửa danh sách trực tiếp. So sánh với IsListStyleDefinition để phân biệt một danh sách tự định dạng riêng của nó.


Câu Hỏi Thường Gặp

Sự khác nhau giữa List và ListFormat là gì?

List là định nghĩa đánh số hoặc dấu đầu dòng có thể tái sử dụng được chia sẻ giữa các đoạn văn. ListFormat là theo từng đoạn — nó chỉ ra List đoạn văn cụ thể sử dụng và cấp độ nào, thông qua ListFormat.List và ListLevelNumber.

Làm sao tôi kiểm tra xem một đoạn văn đã là một phần của danh sách chưa?

Đọc ListFormat.IsListItem về định dạng của đoạn văn. Nếu true, ListFormat.List và ListLevelNumber xác định danh sách và cấp độ mà nó thuộc về.

Làm sao để danh sách mới bắt đầu đánh số từ 1 một cách độc lập với danh sách hiện có?

Sử dụng ListCollection.AddCopy(srcList) để tạo một bản sao độc lập của định nghĩa danh sách, sau đó áp dụng bản sao này cho các đoạn văn mới thay vì tái sử dụng List gốc, vì nó sẽ tiếp tục cùng một bộ đếm.

Làm sao tôi tạo danh sách dấu đầu dòng hoặc có số thứ tự từ đầu?

Sử dụng ListFormat.ApplyBulletDefault() hoặc ApplyNumberDefault() cho định dạng mặc định của Word, hoặc ListCollection.Add(listTemplate) với giá trị ListTemplate để bắt đầu từ một định dạng đã định trước và tùy chỉnh List.ListLevels kết quả từ đó.

Làm thế nào để tôi có định dạng số như “1)” thay vì “1.”?

Đặt ListLevel.NumberFormat ở mức độ liên quan thành chuỗi định dạng mong muốn, cùng với NumberStyle cho kiểu số.


Xem thêm

 Tiếng Việt