CommentRangeStart
Содержание
[
Скрывать
]CommentRangeStart class
Обозначает начало области текста, с которой связан комментарий.
Чтобы узнать больше, посетитеРабота с комментариями статья документации.
public sealed class CommentRangeStart : Node
Конструкторы
Имя | Описание |
---|---|
CommentRangeStart(DocumentBase, int) | Инициализирует новый экземпляр этого класса. |
Характеристики
Имя | Описание |
---|---|
CustomNodeId { get; set; } | Указывает пользовательский идентификатор узла. |
virtual Document { get; } | Получает документ, которому принадлежит этот узел. |
Id { get; set; } | Указывает идентификатор комментария, с которым связан этот регион. |
virtual IsComposite { get; } | Возвращаетистинный если этот узел может содержать другие узлы. |
NextSibling { get; } | Получает узел, следующий сразу за этим узлом. |
override NodeType { get; } | ВозвращаетCommentRangeStart . |
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
ценить.
CommentRangeStart
является узлом встроенного уровня и может быть только дочерним элементом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))
{
// Сначала посещаем начало диапазона комментариев.
CommentRangeStart commentRangeStart = (CommentRangeStart)comment.PreviousSibling.PreviousSibling.PreviousSibling;
commentRangeStart.Accept(commentVisitor);
// Затем просмотрите комментарий и все ответы, которые он может иметь.
comment.Accept(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>
/// Вызывается, когда в документе встречается узел Run.
/// </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 name="text"></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