چگونه با لیستها در .NET کار کنیم
نحوه کار با فهرستها در .NET
فهرستهای شمارهدار و بولتدار در یک سند Word از سه شیء مشترک ساخته میشوند: List، تعریف شمارهگذاری قابل استفاده مجدد؛ ListFormat که به یک پاراگراف خاص میگوید به کدام فهرست و سطح تعلق دارد؛ و ListLevel که قالببندی واقعی یک سطح را نگه میدارد. این راهنما نشان میدهد چگونه یک فهرست را به پاراگراف اعمال کنید، فهرستهای جداگانه را از اشتراکگذاری شمارنده جلوگیری کنید، پاراگرافها را بین سطوح جابهجا کنید، و قالببندی شمارهگذاری و بولت را با Aspose.Words FOSS برای .NET سفارشی کنید.
راهنمای گام به گام
مرحله ۱: اعمال فهرست به یک پاراگراف
از ListFormat.ApplyBulletDefault() یا ApplyNumberDefault() بر روی قالببندی یک پاراگراف استفاده کنید تا فهرست بولت یا شمارهدار پیشفرض Word را در یک فراخوانی اعمال کنید — این سریعترین روش برای اعمال یک فهرست استاندارد است. برای یک قالب پیشتعریف شده خاص به جای پیشفرض، Document.Lists (یک ListCollection) را با .Add(listTemplate) و مقدار ListTemplate مانند BulletDisk، BulletSquare، NumberArabicDot یا NumberUppercaseRomanDot فراخوانی کنید تا یک List از یکی از قالبهای توکار Word ایجاد کنید، یا AddSingleLevelList(listTemplate) برای یک گونه تکسطحی. هنگامی که یک پاراگراف قالببندی فهرست دارد، ListFormat.IsListItem گزارش میدهد true، و ListFormat.List/ListLevelNumber تعیین میکنند که از کدام فهرست و سطح استفاده میکند.
مرحله ۲: اختصاص شمارهگذاری مستقل به یک گروه جدید از پاراگرافها
پاراگرافهایی که ListFormat.List آنها به همان شیء مشترک List اشاره میکند، شمارشگر یکسان را ادامه میدهند. وقتی یک گروه جدید از پاراگرافها به شمارهگذاری نیاز دارند که به طور مستقل از ۱ دوباره شروع شود، ListCollection.AddCopy(srcList) را فراخوانی کنید تا تعریف لیست موجود را کپی کنید، سپس این کپی را به پاراگرافهای جدید اعمال کنید به جای استفاده مجدد از اصلی. ListCollection.GetListByListId(listId) یک لیست خاص را بر اساس ListId آن بازیابی میکند وقتی که نیاز دارید یک لیست را پیدا کنید نه اینکه بسازید، و Count گزارش میدهد که مستند در حال حاضر چند لیست دارد.
مرحله ۳: جابجایی یک پاراگراف بین سطوح لیست
از ListFormat.ListIndent() برای جابجایی یک پاراگراف یک سطح عمیقتر در لیست آن استفاده کنید، و از ListOutdent() برای جابجایی یک سطح کمتر — همان عملیاتی که Word برای Tab و Shift+Tab در ابتدای پاراگراف لیست انجام میدهد. ترجیحاً این روشها را به جای تنظیم مستقیم ListLevelNumber استفاده کنید، زیرا قالببندی لیست پاراگراف را به صورت داخلی سازگار نگه میدارند. برای حذف کامل قالببندی لیست از یک پاراگراف، RemoveNumbers() را فراخوانی کنید.
مرحله ۴: سفارشیسازی قالب شمارهگذاری سطح لیست
به یک سطح خاص از طریق List.ListLevels (یک ListLevelCollection) دسترسی پیدا کنید، سپس ListLevel.NumberStyle (یک مقدار NumberStyle مانند Arabic، UppercaseRoman، LowercaseLetter یا Bullet) و NumberFormat — رشته قالب که عدد را با متن ثابت مانند نقطه یا پرانتز ترکیب میکند — را همزمان تنظیم کنید، زیرا ترکیب نادرست منجر به رندر غیرمنتظره میشود. StartAt عدد شروع سطح را تنظیم میکند، و RestartAfterLevel تعیین میکند که افزایش کدام سطح بالاتر شمارنده این سطح را دوباره راهاندازی میکند — آن را بهصورت صریح بر روی لیستهای تو در تو تنظیم کنید بهجای اتک به رفتار پیشفرض راهاندازی مجدد. Alignment (Left، Center، Right) و TrailingCharacter (Tab، Space، Nothing) موقعیت برچسب و جداکننده بین برچسب و متن پاراگراف را کنترل میکنند، همراه با TabPosition، NumberPosition و TextPosition برای چیدمان دقیق. IsLegal شمارهگذاری به سبک قانونی (همیشه عربی) را صرفنظر از NumberStyle اعمال میکند.
مرحله ۵: افزودن یک نقطه گلوله تصویری به سطح لیست
روی سطح هدف ListLevel.CreatePictureBullet() را فراخوانی کنید تا تعریف نقطه گلوله تصویری ایجاد شود، سپس ImageData گلوله را فراهم کنید قبل از حذف هر قالببندی نقطه گلوله متنی موجود در همان سطح. برای حذف نقطه گلوله تصویری و بازگشت به قالببندی نقطه گلوله مبتنی بر متن، DeletePictureBullet() را فراخوانی کنید.
مرحله ۶: بررسی برچسب رندر شده یک مورد لیست
ListLabel توصیف میکند برچسبی که در واقع برای یک نمونه مورد لیست رندر میشود، که از قالببندی پاراگراف مورد دسترسی میشود. LabelString متن لغوی است که Word نمایش میدهد — مانند «3.» یا «•» — LabelValue مقدار عددی زیرین است، و Font قالببندی خود برچسب است، مستقل از قالببندی متن پاراگراف. برای محاسبه مقدار برچسب در موقعیتی دلخواه در دنباله بدون رندر کل لیست، ListLevel.GetEffectiveValue(index, numberStyle, customNumberStyleFormat) را فراخوانی کنید.
مشکلات رایج و راهحلها
دو پاراگراف که باید بهصورت مستقل شمارهگذاری شوند، همان توالی را ادامه میدهند. هر دو پاراگراف ListFormat.List به همان مشترک اشاره میکند List شی. به گروه دوم فهرست خود را از طریق بدهید ListCollection.AddCopy(srcList) بهجای استفاده مجدد از همان List.
یک رشته قالب شمارهگذاری سفارشی همانطور که انتظار میرود نمایش داده نمیشود. ListLevel.NumberFormat با الگوی مورد انتظار برای سطح مطابقت ندارد NumberStyle. تأیید کنید NumberFormat and NumberStyle بهصورت یکسان برای سطحی که در حال ویرایش است تنظیم میشوند.
فاصلهگذاری فهرست پس از تغییر سطوح بهصورت برنامهنویسی بهنظر میرسد نادرست باشد. ListLevelNumber بهطور مستقیم تنظیم شد بدون بهروزرسانی ویژگیهای موقعیت مرتبط. استفاده کنید ListFormat.ListIndent()/ListOutdent() بهجای تنظیم ListLevelNumber بهطور مستقیم.
یک گلوله تصویری در سطح ظاهر نمیشود. هیچ گلوله تصویری برای آن سطح ایجاد نشد، یا قالببندی پیشفرض متن-گلوله هنوز فعال است. فراخوانی کنید ListLevel.CreatePictureBullet() و دادههای تصویر را قبل از حذف قالببندی متن-گلوله فراهم کنید.
یک فهرست مرتبط با سبک به تغییرات قالببندی مستقیم واکنش نمیدهد. Check List.IsListStyleReference — قالببندی فهرست ارجاعدهنده به سبک توسط لینک آن کنترل میشود Style (از طریق List.Style)، نه با ویرایش مستقیم فهرست. در مقابل مقایسه کنید IsListStyleDefinition برای تشخیص فهرستی که قالببندی خود را تعریف میکند.
سوالات متداول
تفاوت بین List و ListFormat چیست؟
List تعریف شمارهگذاری یا بولت قابلاستفاده مجدد است که بین پاراگرافها به اشتراک گذاشته میشود. ListFormat برای هر پاراگراف است — به این اشاره دارد که List یک پاراگراف خاص استفاده میکند و در چه سطحی، از طریق ListFormat.List و ListLevelNumber.
چگونه بررسی کنم که آیا یک پاراگراف قبلاً بخشی از یک فهرست است یا نه؟
ListFormat.IsListItem را درباره قالببندی پاراگراف بخوانید. اگر true، ListFormat.List و ListLevelNumber شناسایی کنند که این پاراگراف به کدام فهرست و سطح تعلق دارد.
چگونه میتوانم یک فهرست جدید را طوری تنظیم کنم که شمارهگذاری آن از ۱ شروع شود و مستقل از فهرست موجود باشد؟
از ListCollection.AddCopy(srcList) برای ایجاد یک نسخه مستقل از تعریف فهرست استفاده کنید، سپس این نسخه را به پاراگرافهای جدید اعمال کنید به جای استفاده مجدد از List اصلی، که شمارندهٔ یکسان را ادامه میدهد.
چگونه میتوانم یک فهرست بولتدار یا شمارهدار را از ابتدا ایجاد کنم؟
از ListFormat.ApplyBulletDefault() یا ApplyNumberDefault() برای قالببندی پیشفرض ورد استفاده کنید، یا ListCollection.Add(listTemplate) با مقدار ListTemplate برای شروع از یک قالب از پیش تعریفشده و سفارشیسازی List.ListLevels حاصل از آن.
چگونه میتوانم قالب عددی مانند «1)» به جای «1.» دریافت کنم؟
در سطح مربوطه، ListLevel.NumberFormat را روی رشته قالب دلخواه تنظیم کنید، همراه با NumberStyle برای خود سبک عددی.