FieldToc

FieldToc class

ينفذ حقل جدول المحتويات.

لمعرفة المزيد، قم بزيارةالعمل مع الحقول مقالة توثيقية.

public class FieldToc : Field

المنشئون

اسموصف
FieldToc()Default_Constructor

الخصائص

اسموصف
BookmarkName { get; set; }يحصل على اسم الإشارة المرجعية التي تحدد الجزء من المستند المستخدم لبناء الجدول أو يعينه.
CaptionlessTableOfFiguresLabel { get; set; }يحصل على اسم معرف التسلسل المستخدم عند إنشاء جدول الأشكال الذي لا يتضمن تسمية ورقم التسمية التوضيحية أو يعينه.
CustomStyles { get; set; }يحصل على قائمة أنماط أخرى غير أنماط العناوين المضمنة لتضمينها في جدول المحتويات أو يعينها.
DisplayResult { get; }يحصل على النص الذي يمثل نتيجة الحقل المعروضة.
End { get; }يحصل على العقدة التي تمثل نهاية الحقل.
EntryIdentifier { get; set; }يحصل على أو يعين سلسلة يجب أن تتطابق مع معرفات النوع لحقول TC المضمنة.
EntryLevelRange { get; set; }يحصل على نطاق من مستويات إدخالات جدول المحتويات المراد تضمينها أو يعينه.
EntrySeparator { get; set; }يحصل على أو يعين تسلسلًا من الأحرف التي تفصل بين الإدخال ورقم الصفحة.
Format { get; }يحصل علىFieldFormatالكائن الذي يوفر الوصول المكتوب إلى تنسيق الحقل.
HeadingLevelRange { get; set; }يحصل على نطاق من مستويات العنوان المراد تضمينها أو يعينه.
HideInWebLayout { get; set; }يحصل على أو يحدد ما إذا كان سيتم إخفاء علامة التبويب وأرقام الصفحات في عرض تخطيط الويب.
InsertHyperlinks { get; set; }يحصل على أو يحدد ما إذا كان سيتم جعل إدخالات جدول المحتويات روابط تشعبية.
IsDirty { get; set; }يحصل على أو يحدد ما إذا كانت النتيجة الحالية للحقل لم تعد صحيحة (قديمة) بسبب التعديلات الأخرى التي تم إجراؤها على المستند.
IsLocked { get; set; }يحصل على أو يحدد ما إذا كان الحقل مقفلاً (لا ينبغي إعادة حساب نتيجته).
LocaleId { get; set; }يحصل على أو يعين LCID للحقل.
PageNumberOmittingLevelRange { get; set; }يحصل على نطاق من مستويات إدخالات جدول المحتويات أو يعينه لحذف أرقام الصفحات منه.
PrefixedSequenceIdentifier { get; set; }يحصل على معرف التسلسل الذي يجب إضافة بادئة له إلى رقم صفحة الإدخال أو يعينه.
PreserveLineBreaks { get; set; }يحصل على أو يحدد ما إذا كان سيتم الاحتفاظ بأحرف السطر الجديد داخل إدخالات الجدول.
PreserveTabs { get; set; }يحصل على أو يحدد ما إذا كان سيتم الاحتفاظ بإدخالات علامة التبويب داخل إدخالات الجدول.
Result { get; set; }يحصل على النص الموجود بين فاصل الحقل ونهاية الحقل أو يعينه.
Separator { get; }يحصل على العقدة التي تمثل فاصل الحقل. يمكن أن يكونباطل .
SequenceSeparator { get; set; }يحصل على أو يعين تسلسل الأحرف المستخدم لفصل أرقام التسلسل وأرقام الصفحات.
Start { get; }يحصل على العقدة التي تمثل بداية الحقل.
TableOfFiguresLabel { get; set; }يحصل على اسم معرف التسلسل المستخدم عند إنشاء جدول الأشكال أو يعينه.
virtual Type { get; }يحصل على نوع حقل Microsoft Word.
UseParagraphOutlineLevel { get; set; }يحصل على أو يحدد ما إذا كان سيتم استخدام مستوى مخطط الفقرة المطبق.

طُرق

اسموصف
GetFieldCode()يعيد النص بين بداية الحقل وفاصل الحقل (أو نهاية الحقل إذا لم يكن هناك فاصل). يتم تضمين كل من رمز الحقل ونتيجة الحقل للحقول الفرعية.
GetFieldCode(bool)إرجاع النص بين بداية الحقل وفاصل الحقل (أو نهاية الحقل إذا لم يكن هناك فاصل).
Remove()يُزيل الحقل من المستند. يُرجع عقدة بعد الحقل مباشرةً. إذا كانت نهاية الحقل هي آخر عقدة فرعية للعقدة الأصلية، تُرجع فقرته الأصلية. إذا كان الحقل قد حُذف مُسبقًا، تُرجعباطل .
Unlink()يقوم بإلغاء ربط الحقل.
Update()يُجري تحديث الحقل. يُطرح هذا الخطأ إذا كان الحقل قيد التحديث بالفعل.
Update(bool)يُجري تحديثًا للحقل. يُطرح هذا الخطأ إذا كان الحقل قيد التحديث بالفعل.
UpdatePageNumbers()تحديث أرقام الصفحات للعناصر الموجودة في جدول المحتويات هذا.

ملاحظات

يقوم بإنشاء جدول محتويات (يمكن أن يكون أيضًا جدول أشكال) باستخدام الإدخالات المحددة بواسطة حقول TC، و ومستويات عناوينها، والأنماط المحددة، ثم يقوم بإدراج هذا الجدول في هذا المكان في المستند.

أمثلة

يوضح كيفية إدراج جدول المحتويات، وملئه بالإدخالات استنادًا إلى أنماط العنوان.

public void FieldToc()
{
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    builder.StartBookmark("MyBookmark");

    // أدخل حقل جدول المحتويات، والذي سيقوم بتجميع كافة العناوين في جدول المحتويات.
    // لكل عنوان، سيقوم هذا الحقل بإنشاء سطر يحتوي على النص الموجود في نمط العنوان هذا على اليسار،
    // والصفحة التي يظهر فيها العنوان على اليمين.
    FieldToc field = (FieldToc)builder.InsertField(FieldType.FieldTOC, true);

    // استخدم خاصية BookmarkName لإدراج العناوين فقط
    // التي تظهر ضمن حدود الإشارة المرجعية باسم "MyBookmark".
    field.BookmarkName = "MyBookmark";

    // سيتم احتساب النص الذي يحتوي على نمط عنوان مدمج، مثل "العنوان 1"، كعنوان.
    // يمكننا تسمية الأنماط الإضافية التي سيتم التقاطها كعناوين بواسطة جدول المحتويات في هذه الخاصية ومستويات جدول المحتويات الخاصة بها.
    field.CustomStyles = "Quote; 6; Intense Quote; 7";

    // بشكل افتراضي، يتم فصل مستويات الأنماط/جدول المحتويات في خاصية CustomStyles بفاصلة،
    // ولكن يمكننا تعيين فاصل مخصص في هذه الخاصية.
    doc.FieldOptions.CustomTocStyleSeparator = ";";

    // قم بتكوين الحقل لاستبعاد أي عناوين تحتوي على مستويات جدول المحتويات خارج هذا النطاق.
    field.HeadingLevelRange = "1-3";

    // لن يعرض جدول المحتويات أرقام الصفحات للعناوين التي تقع مستويات جدول المحتويات الخاصة بها ضمن هذا النطاق.
    field.PageNumberOmittingLevelRange = "2-5";

     // تعيين سلسلة مخصصة لفصل كل عنوان عن رقم الصفحة.
    field.EntrySeparator = "-";
    field.InsertHyperlinks = true;
    field.HideInWebLayout = false;
    field.PreserveLineBreaks = true;
    field.PreserveTabs = true;
    field.UseParagraphOutlineLevel = false;

    InsertNewPageWithHeading(builder, "First entry", "Heading 1");
    builder.Writeln("Paragraph text.");
    InsertNewPageWithHeading(builder, "Second entry", "Heading 1");
    InsertNewPageWithHeading(builder, "Third entry", "Quote");
    InsertNewPageWithHeading(builder, "Fourth entry", "Intense Quote");

    // سيتم حذف أرقام الصفحات لهذين العنوانين لأنهما ضمن النطاق "2-5".
    InsertNewPageWithHeading(builder, "Fifth entry", "Heading 2");
    InsertNewPageWithHeading(builder, "Sixth entry", "Heading 3");

    // لا يظهر هذا الإدخال لأن "العنوان 4" خارج النطاق "1-3" الذي حددناه سابقًا.
    InsertNewPageWithHeading(builder, "Seventh entry", "Heading 4");

    builder.EndBookmark("MyBookmark");
    builder.Writeln("Paragraph text.");

    // لا يظهر هذا الإدخال لأنه خارج الإشارة المرجعية المحددة بواسطة جدول المحتويات.
    InsertNewPageWithHeading(builder, "Eighth entry", "Heading 1");

    Assert.AreEqual(" TOC  \\b MyBookmark \\t \"Quote; 6; Intense Quote; 7\" \\o 1-3 \\n 2-5 \\p - \\h \\x \\w", field.GetFieldCode());

    field.UpdatePageNumbers();
    doc.UpdateFields();
    doc.Save(ArtifactsDir + "Field.TOC.docx");
}

/// <summary>
/// ابدأ صفحة جديدة وأدرج فقرة ذات نمط محدد.
/// </summary>
public void InsertNewPageWithHeading(DocumentBuilder builder, string captionText, string styleName)
{
    builder.InsertBreak(BreakType.PageBreak);
    string originalStyle = builder.ParagraphFormat.StyleName;
    builder.ParagraphFormat.Style = builder.Document.Styles[styleName];
    builder.Writeln(captionText);
    builder.ParagraphFormat.Style = builder.Document.Styles[originalStyle];
}

يوضح كيفية ملء حقل جدول المحتويات بالإدخالات باستخدام حقول التسلسل.

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// يمكن لحقل جدول المحتويات إنشاء إدخال في جدول المحتويات الخاص به لكل حقل تسلسل موجود في المستند.
// يحتوي كل إدخال على الفقرة التي تتضمن حقل SEQ ورقم الصفحة التي يظهر فيها الحقل.
FieldToc fieldToc = (FieldToc)builder.InsertField(FieldType.FieldTOC, true);

// تعرض حقول SEQ عددًا يتزايد عند كل حقل SEQ.
// تحتفظ هذه الحقول أيضًا بعدد منفصل لكل تسلسل مسمى فريد
// تم تحديده بواسطة خاصية "SequenceIdentifier" في حقل SEQ.
// استخدم خاصية "TableOfFiguresLabel" لتسمية التسلسل الرئيسي لجدول المحتويات.
// الآن، سيقوم جدول المحتويات هذا بإنشاء إدخالات فقط من حقول التسلسل مع تعيين "SequenceIdentifier" الخاصة بها على "MySequence".
fieldToc.TableOfFiguresLabel = "MySequence";

// يمكننا تسمية تسلسل حقل SEQ آخر في خاصية "PrefixedSequenceIdentifier".
 // لن تقوم حقول SEQ من تسلسل البادئة هذا بإنشاء إدخالات TOC.
// كل إدخال جدول المحتويات الذي تم إنشاؤه من حقل التسلسل الرئيسي سيعرض الآن أيضًا العدد الذي
// تسلسل البادئة موجود حاليًا في حقل تسلسل SEQ الأساسي الذي أجرى الإدخال.
fieldToc.PrefixedSequenceIdentifier = "PrefixSequence";

// سيعرض كل إدخال في جدول المحتويات عدد تسلسل البادئة على الفور إلى اليسار
// رقم الصفحة التي يظهر فيها حقل التسلسل الرئيسي.
//يمكننا تحديد فاصل مخصص سيظهر بين هذين الرقمين.
fieldToc.SequenceSeparator = ">";

Assert.AreEqual(" TOC  \\c MySequence \\s PrefixSequence \\d >", fieldToc.GetFieldCode());

builder.InsertBreak(BreakType.PageBreak);

// هناك طريقتان لاستخدام حقول SEQ لملء جدول المحتويات هذا.
// 1 - إدراج حقل SEQ الذي ينتمي إلى تسلسل بادئة جدول المحتويات:
// سيؤدي هذا الحقل إلى زيادة عدد تسلسل SEQ لـ "PrefixSequence" بمقدار 1.
// بما أن هذا الحقل لا ينتمي إلى التسلسل الرئيسي المحدد
// بواسطة خاصية "TableOfFiguresLabel" في جدول المحتويات، فلن يظهر كإدخال.
FieldSeq fieldSeq = (FieldSeq)builder.InsertField(FieldType.FieldSequence, true);
fieldSeq.SequenceIdentifier = "PrefixSequence";
builder.InsertParagraph();

Assert.AreEqual(" SEQ  PrefixSequence", fieldSeq.GetFieldCode());

// 2 - إدراج حقل SEQ الذي ينتمي إلى التسلسل الرئيسي لجدول المحتويات:
// سيؤدي حقل SEQ هذا إلى إنشاء إدخال في جدول المحتويات.
// سيحتوي إدخال جدول المحتويات على الفقرة التي يوجد بها حقل التسلسل ورقم الصفحة التي يظهر فيها.
// سيعرض هذا الإدخال أيضًا العدد الذي يوجد عنده تسلسل البادئة حاليًا،
// مفصولة عن رقم الصفحة بالقيمة الموجودة في خاصية SeqenceSeparator في جدول المحتويات.
// عدد "PrefixSequence" هو 1، حقل SEQ التسلسل الرئيسي هذا موجود في الصفحة 2،
// والفاصل هو ">"، لذلك سيتم عرض الإدخال "1>2".
builder.Write("First TOC entry, MySequence #");
fieldSeq = (FieldSeq)builder.InsertField(FieldType.FieldSequence, true);
fieldSeq.SequenceIdentifier = "MySequence";

Assert.AreEqual(" SEQ  MySequence", fieldSeq.GetFieldCode());

// قم بإدراج صفحة، ثم قم بتقديم تسلسل البادئة بمقدار 2، ثم أدخل حقل SEQ لإنشاء إدخال جدول المحتويات بعد ذلك.
// تسلسل البادئة موجود الآن عند 2، وحقل تسلسل SEQ الرئيسي موجود في الصفحة 3،
// لذلك سيتم عرض إدخال جدول المحتويات "2>3" في عدد الصفحات.
builder.InsertBreak(BreakType.PageBreak);
fieldSeq = (FieldSeq)builder.InsertField(FieldType.FieldSequence, true);
fieldSeq.SequenceIdentifier = "PrefixSequence";
builder.InsertParagraph();
fieldSeq = (FieldSeq)builder.InsertField(FieldType.FieldSequence, true);
builder.Write("Second TOC entry, MySequence #");
fieldSeq.SequenceIdentifier = "MySequence";

doc.UpdateFields();
doc.Save(ArtifactsDir + "Field.TOC.SEQ.docx");

أنظر أيضا