EditableRangeEnd

EditableRangeEnd class

يمثل نهاية نطاق قابل للتحرير في مستند Word.

public sealed class EditableRangeEnd : Node

الخصائص

اسم وصف
CustomNodeId { get; set; } يحدد معرف العقدة المخصص .
virtual Document { get; } الحصول على المستند الذي تنتمي إليه هذه العقدة .
EditableRangeStart { get; } EditableRangeStart المقابل ، تم استلامه بواسطة ID.
Id { get; set; } يحدد معرف النطاق القابل للتحرير.
virtual IsComposite { get; } إرجاع صحيح إذا كانت هذه العقدة يمكن أن تحتوي على عقد أخرى.
NextSibling { get; } يحصل على العقدة التي تلي هذه العقدة مباشرة.
override NodeType { get; } عوائدEditableRangeEnd .
ParentNode { get; } الحصول على الأصل المباشر لهذه العقدة.
PreviousSibling { get; } يحصل على العقدة التي تسبق هذه العقدة مباشرة.
Range { get; } إرجاع أ نطاق الكائن الذي يمثل جزء المستند الموجود في هذه العقدة.

طُرق

اسم وصف
override Accept(DocumentVisitor) يقبل الزائر .
Clone(bool) لإنشاء نسخة مكررة من العقدة .
GetAncestor(NodeType) يحصل على أول سلف محددNodeType .
GetAncestor(Type) الحصول على الأصل الأول لنوع الكائن المحدد.
virtual GetText() يحصل على نص هذه العقدة وجميع توابعها.
NextPreOrder(Node) الحصول على العقدة التالية وفقًا لخوارزمية اجتياز الشجرة بالطلب المسبق.
PreviousPreOrder(Node) الحصول على العقدة السابقة وفقًا لخوارزمية اجتياز الشجرة بالطلب المسبق.
Remove() يزيل نفسه من الأصل.
ToString(SaveFormat) يصدر محتوى العقدة إلى سلسلة بالتنسيق المحدد.
ToString(SaveOptions) يصدر محتوى العقدة إلى سلسلة باستخدام خيارات الحفظ المحددة.

ملاحظات

يتكون النطاق الكامل القابل للتحرير في مستند Word من ملفEditableRangeStart ومطابقةEditableRangeEnd بنفس المعرف.

EditableRangeStart وEditableRangeEnd هي مجرد علامات داخل document تحدد أين يبدأ النطاق القابل للتحرير وينتهي.

استخدم الEditableRangeفئة كـ “واجهة” للعمل مع نطاق قابل للتحرير ككائن واحد.

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

أمثلة

يوضح كيفية تقييد حقوق التحرير للنطاقات القابلة للتحرير لمجموعة / مستخدم معين.

public void Visitor()
{
    Document doc = new Document();
    doc.Protect(ProtectionType.ReadOnly, "MyPassword");

    DocumentBuilder builder = new DocumentBuilder(doc);
    builder.Writeln("Hello world! Since we have set the document's protection level to read-only," +
                    " we cannot edit this paragraph without the password.");

    // عندما نكتب حماية المستندات ، تسمح لنا النطاقات القابلة للتحرير باختيار مناطق محددة يمكن للمستخدمين تحريرها.
    // هناك طريقتان متنافيتان لتضييق نطاق قائمة المحررين المسموح لهم.
    // 1 - حدد مستخدمًا:
    EditableRange editableRange = builder.StartEditableRange().EditableRange;
    editableRange.SingleUser = "john.doe@myoffice.com";
    builder.Writeln($"This paragraph is inside the first editable range, can only be edited by {editableRange.SingleUser}.");
    builder.EndEditableRange();

    Assert.AreEqual(EditorType.Unspecified, editableRange.EditorGroup);

    // 2 - حدد مجموعة يرتبط بها المستخدمون المسموح لهم بـ:
    editableRange = builder.StartEditableRange().EditableRange;
    editableRange.EditorGroup = EditorType.Administrators;
    builder.Writeln($"This paragraph is inside the first editable range, can only be edited by {editableRange.EditorGroup}.");
    builder.EndEditableRange();

    Assert.AreEqual(string.Empty, editableRange.SingleUser);

    builder.Writeln("This paragraph is outside the editable range, and cannot be edited by anybody.");

    // طباعة تفاصيل ومحتويات كل نطاق قابل للتحرير في المستند.
    EditableRangePrinter editableRangePrinter = new EditableRangePrinter();

    doc.Accept(editableRangePrinter);

    Console.WriteLine(editableRangePrinter.ToText());
}

/// <summary>
/// يجمع خصائص ومحتويات النطاقات القابلة للتحرير التي تمت زيارتها في سلسلة.
/// </summary>
public class EditableRangePrinter : DocumentVisitor
{
    public EditableRangePrinter()
    {
        mBuilder = new StringBuilder();
    }

    public string ToText()
    {
        return mBuilder.ToString();
    }

    public void Reset()
    {
        mBuilder.Clear();
        mInsideEditableRange = false;
    }

    /// <summary>
    /// يتم الاستدعاء عند مواجهة عقدة EditableRangeStart في المستند.
    /// </summary>
    public override VisitorAction VisitEditableRangeStart(EditableRangeStart editableRangeStart)
    {
        mBuilder.AppendLine(" -- Editable range found! -- ");
        mBuilder.AppendLine("\tID:\t\t" + editableRangeStart.Id);
        if (editableRangeStart.EditableRange.SingleUser == string.Empty)
            mBuilder.AppendLine("\tGroup:\t" + editableRangeStart.EditableRange.EditorGroup);
        else
            mBuilder.AppendLine("\tUser:\t" + editableRangeStart.EditableRange.SingleUser);
        mBuilder.AppendLine("\tContents:");

        mInsideEditableRange = true;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم الاستدعاء عند مواجهة عقدة EditableRangeEnd في المستند.
    /// </summary>
    public override VisitorAction VisitEditableRangeEnd(EditableRangeEnd editableRangeEnd)
    {
        mBuilder.AppendLine(" -- End of editable range --\n");

        mInsideEditableRange = false;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم الاستدعاء عند مواجهة عقدة تشغيل في المستند. يسجل هذا الزائر فقط عمليات التشغيل الموجودة داخل نطاقات قابلة للتحرير.
    /// </summary>
    public override VisitorAction VisitRun(Run run)
    {
        if (mInsideEditableRange) mBuilder.AppendLine("\t\"" + run.Text + "\"");

        return VisitorAction.Continue;
    }

    private bool mInsideEditableRange;
    private readonly StringBuilder mBuilder;
}

أنظر أيضا