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);

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

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

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

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

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

builder.InsertBreak(BreakType.PageBreak);

// هناك طريقتان لاستخدام حقول التسلسل لملء جدول المحتويات هذا.
// 1 - إدراج حقل SEQ ينتمي إلى تسلسل بادئة جدول المحتويات:
// سيؤدي هذا الحقل إلى زيادة عدد تسلسل SEQ لـ "PrefixSequence" بمقدار 1.
// نظرًا لأن هذا الحقل لا ينتمي إلى التسلسل الرئيسي المحدد
// بواسطة خاصية "TableOfFigersLabel" لجدول المحتويات، لن يظهر كإدخال.
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");

أنظر أيضا