CommentRangeEnd
محتويات
[
يخفي
]CommentRangeEnd class
يشير إلى نهاية منطقة النص التي تحتوي على تعليق مرتبط بها.
لمعرفة المزيد، قم بزيارةالعمل مع التعليقات مقالة توثيقية.
public sealed class CommentRangeEnd : Node
المنشئون
اسم | وصف |
---|---|
CommentRangeEnd(DocumentBase, int) | يقوم بتهيئة مثيل جديد لهذه الفئة. |
الخصائص
اسم | وصف |
---|---|
CustomNodeId { get; set; } | يحدد معرف العقدة المخصص. |
virtual Document { get; } | يحصل على المستند الذي تنتمي إليه هذه العقدة. |
Id { get; set; } | يحدد معرف التعليق الذي ترتبط به هذه المنطقة. |
virtual IsComposite { get; } | إرجاعحقيقي إذا كانت هذه العقدة قادرة على احتواء عقد أخرى. |
NextSibling { get; } | يحصل على العقدة التي تلي هذه العقدة مباشرة. |
override NodeType { get; } | إرجاعCommentRangeEnd . |
ParentNode { get; } | يحصل على الوالد المباشر لهذه العقدة. |
PreviousSibling { get; } | يحصل على العقدة التي تسبق هذه العقدة مباشرةً. |
Range { get; } | يعيدRange الكائن الذي يمثل الجزء من المستند الموجود في هذه العقدة. |
طُرق
اسم | وصف |
---|---|
override Accept(DocumentVisitor) | يقبل زائرًا. |
Clone(bool) | ينشئ نسخة مكررة من العقدة. |
GetAncestor(NodeType) | يحصل على السلف الأول للعنصر المحددNodeType . |
GetAncestor(Type) | يحصل على السلف الأول لنوع الكائن المحدد. |
virtual GetText() | يحصل على نص هذه العقدة وجميع أبنائها. |
NextPreOrder(Node) | يحصل على العقدة التالية وفقًا لخوارزمية عبور شجرة الترتيب المسبق. |
PreviousPreOrder(Node) | يحصل على العقدة السابقة وفقًا لخوارزمية عبور شجرة الترتيب المسبق. |
Remove() | يزيل نفسه من الأصل. |
ToString(SaveFormat) | يصدر محتوى العقدة إلى سلسلة بالتنسيق المحدد. |
ToString(SaveOptions) | يقوم بتصدير محتوى العقدة إلى سلسلة باستخدام خيارات الحفظ المحددة. |
ملاحظات
لإنشاء تعليق مرتبط بمنطقة من النص، تحتاج إلى إنشاءComment
and ثم قم بإنشاءCommentRangeStart
وCommentRangeEnd
وتعيين معرفاتهم إلى نفس القيمةId
قيمة.
CommentRangeEnd
هي عقدة على مستوى الخط ولا يمكن أن تكون إلا طفلة لـParagraph
.
أمثلة
يوضح كيفية طباعة محتويات كافة التعليقات ونطاقات تعليقاتها باستخدام زائر المستند.
public void CreateCommentsAndPrintAllInfo()
{
Document doc = new Document();
Comment newComment = new Comment(doc)
{
Author = "VDeryushev",
Initial = "VD",
DateTime = DateTime.Now
};
newComment.SetText("Comment regarding text.");
// أضف نصًا إلى المستند، ثم قم بتحريف النص داخل نطاق التعليقات، ثم أضف تعليقك.
Paragraph para = doc.FirstSection.Body.FirstParagraph;
para.AppendChild(new CommentRangeStart(doc, newComment.Id));
para.AppendChild(new Run(doc, "Commented text."));
para.AppendChild(new CommentRangeEnd(doc, newComment.Id));
para.AppendChild(newComment);
//أضف ردين على التعليق.
newComment.AddReply("John Doe", "JD", DateTime.Now, "New reply.");
newComment.AddReply("John Doe", "JD", DateTime.Now, "Another reply.");
PrintAllCommentInfo(doc.GetChildNodes(NodeType.Comment, true));
}
/// <summary>
/// يتكرر كل تعليق على المستوى الأعلى ويطبع نطاق التعليق ومحتوياته وردوده.
/// </summary>
private static void PrintAllCommentInfo(NodeCollection comments)
{
CommentInfoPrinter commentVisitor = new CommentInfoPrinter();
// كرر جميع التعليقات الرئيسية. بخلاف تعليقات الرد، لا يوجد للتعليقات الرئيسية أي سلف.
foreach (Comment comment in comments.Where(c => ((Comment)c).Ancestor == null).ToList())
{
// أولاً، قم بزيارة بداية نطاق التعليق.
CommentRangeStart commentRangeStart = (CommentRangeStart)comment.PreviousSibling.PreviousSibling.PreviousSibling;
commentRangeStart.Accept(commentVisitor);
// ثم قم بزيارة التعليق، وأي ردود قد تكون لديه.
comment.Accept(commentVisitor);
// قم بزيارة بداية التعليق فقط.
comment.AcceptStart(commentVisitor);
// قم بزيارة نهاية التعليق فقط.
comment.AcceptEnd(commentVisitor);
foreach (Comment reply in comment.Replies)
reply.Accept(commentVisitor);
// وأخيرًا، قم بزيارة نهاية نطاق التعليق، ثم قم بطباعة محتويات النص الخاصة بالزائر.
CommentRangeEnd commentRangeEnd = (CommentRangeEnd)comment.PreviousSibling;
commentRangeEnd.Accept(commentVisitor);
Console.WriteLine(commentVisitor.GetText());
}
}
/// <summary>
/// طباعة المعلومات ومحتويات جميع التعليقات ونطاقات التعليقات الموجودة في المستند.
/// </summary>
public class CommentInfoPrinter : DocumentVisitor
{
public CommentInfoPrinter()
{
mBuilder = new StringBuilder();
mVisitorIsInsideComment = false;
}
/// <summary>
/// يحصل على النص العادي للمستند الذي جمعه الزائر.
/// </summary>
public string GetText()
{
return mBuilder.ToString();
}
/// <summary>
/// يتم استدعاؤها عند مواجهة عقدة تشغيل في المستند.
/// </summary>
public override VisitorAction VisitRun(Run run)
{
if (mVisitorIsInsideComment) IndentAndAppendLine("[Run] \"" + run.Text + "\"");
return VisitorAction.Continue;
}
/// <summary>
/// يتم استدعاؤها عند مواجهة عقدة CommentRangeStart في المستند.
/// </summary>
public override VisitorAction VisitCommentRangeStart(CommentRangeStart commentRangeStart)
{
IndentAndAppendLine("[Comment range start] ID: " + commentRangeStart.Id);
mDocTraversalDepth++;
mVisitorIsInsideComment = true;
return VisitorAction.Continue;
}
/// <summary>
/// يتم استدعاؤها عند مواجهة عقدة CommentRangeEnd في المستند.
/// </summary>
public override VisitorAction VisitCommentRangeEnd(CommentRangeEnd commentRangeEnd)
{
mDocTraversalDepth--;
IndentAndAppendLine("[Comment range end] ID: " + commentRangeEnd.Id + "\n");
mVisitorIsInsideComment = false;
return VisitorAction.Continue;
}
/// <summary>
/// يتم استدعاؤها عند مواجهة عقدة تعليق في المستند.
/// </summary>
public override VisitorAction VisitCommentStart(Comment comment)
{
IndentAndAppendLine(
$"[Comment start] For comment range ID {comment.Id}, By {comment.Author} on {comment.DateTime}");
mDocTraversalDepth++;
mVisitorIsInsideComment = true;
return VisitorAction.Continue;
}
/// <summary>
/// يتم استدعاؤها عند انتهاء زيارة عقدة التعليق في المستند.
/// </summary>
public override VisitorAction VisitCommentEnd(Comment comment)
{
mDocTraversalDepth--;
IndentAndAppendLine("[Comment end]");
mVisitorIsInsideComment = false;
return VisitorAction.Continue;
}
/// <summary>
/// أضف سطرًا إلى StringBuilder وقم بتدويره وفقًا لمدى عمق الزائر في شجرة المستند.
/// </summary>
/// <اسم المعلمة="نص"></param>
private void IndentAndAppendLine(string text)
{
for (int i = 0; i < mDocTraversalDepth; i++)
{
mBuilder.Append("| ");
}
mBuilder.AppendLine(text);
}
private bool mVisitorIsInsideComment;
private int mDocTraversalDepth;
private readonly StringBuilder mBuilder;
}
أنظر أيضا
- class Node
- مساحة الاسم Aspose.Words
- المجسم Aspose.Words