Navigation avec le curseur
Lorsque vous travaillez avec un document, même s’il est court ou long, vous devrez naviguer dans votre document. La navigation avec un curseur virtuel représente la possibilité de naviguer entre différents nœuds d’un document.
Dans un document court, se déplacer dans un document est simple puisque vous pouvez déplacer le point d’insertion même en utilisant les touches fléchées du clavier ou en cliquant sur la souris pour localiser le point d’insertion où vous le souhaitez. Mais une fois que vous disposez d’un document volumineux comportant de nombreuses pages, ces techniques de base seront insuffisantes.
Cet article explique comment se déplacer dans un document et naviguer avec un curseur virtuel vers différentes parties de celui-ci.
Détection de la position actuelle du curseur
Avant de commencer le processus de navigation dans votre document, vous devrez obtenir le nœud actuellement sélectionné. Vous pouvez obtenir la position exacte du curseur sur un nœud sélectionné en utilisant la propriété CurrentNode. De plus, au lieu d’obtenir le nœud actuel, vous pouvez obtenir le paragraphe ou la section actuellement sélectionné en utilisant les propriétés CurrentParagraph et CurrentSection.
Toutes les opérations d’insertion que vous effectuez à l’aide du DocumentBuilder seront insérées avant le CurrentNode. Lorsque le paragraphe actuel est vide ou que le curseur est positionné juste avant la fin du paragraphe, le CurrentNode renvoie null.
Navigation dans les méthodes dans un document
Lorsque vous modifiez du texte, il est important de savoir comment naviguer dans votre document et où vous déplacer exactement. Aspose.Words vous permet de vous déplacer dans un document et de naviguer vers ses différentes sections et parties – ceci est similaire à la fonctionnalité du volet de navigation dans Microsoft Word pour accéder à une page ou à un titre dans un document Word sans faire défiler.
La méthode principale est de pouvoir déplacer la position du curseur vers un nœud spécifique de votre document, vous pouvez y parvenir en utilisant la méthode MoveTo.
L’exemple de code suivant montre comment déplacer le DocumentBuilder vers différents nœuds dans un document:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Start a bookmark and add content to it using a DocumentBuilder. | |
builder.StartBookmark("MyBookmark"); | |
builder.Writeln("Bookmark contents."); | |
builder.EndBookmark("MyBookmark"); | |
// The node that the DocumentBuilder is currently at is past the boundaries of the bookmark. | |
Assert.AreEqual(doc.Range.Bookmarks[0].BookmarkEnd, builder.CurrentParagraph.FirstChild); | |
// If we wish to revise the content of our bookmark with the DocumentBuilder, we can move back to it like this. | |
builder.MoveToBookmark("MyBookmark"); | |
// Now we're located between the bookmark's BookmarkStart and BookmarkEnd nodes, so any text the builder adds will be within it. | |
Assert.AreEqual(doc.Range.Bookmarks[0].BookmarkStart, builder.CurrentParagraph.FirstChild); | |
// We can move the builder to an individual node, | |
// which in this case will be the first node of the first paragraph, like this. | |
builder.MoveTo(doc.FirstSection.Body.FirstParagraph.GetChildNodes(NodeType.Any, false)[0]); | |
Assert.AreEqual(NodeType.BookmarkStart, builder.CurrentNode.NodeType); | |
Assert.IsTrue(builder.IsAtStartOfParagraph); | |
// A shorter way of moving the very start/end of a document is with these methods. | |
builder.MoveToDocumentEnd(); | |
Assert.IsTrue(builder.IsAtEndOfParagraph); | |
builder.MoveToDocumentStart(); | |
Assert.IsTrue(builder.IsAtStartOfParagraph); |
Mais outre la méthode de base MoveTo, il en existe des plus spécifiques.
Accédez au début ou à la fin d’un document
Vous pouvez aller au début ou à la fin de votre document en utilisant les méthodes MoveToDocumentStart et MoveToDocumentEnd.
L’exemple de code suivant montre comment déplacer la position du curseur au début ou à la fin d’un document:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Move the cursor position to the beginning of your document. | |
builder.MoveToDocumentStart(); | |
Console.WriteLine("\nThis is the beginning of the document."); | |
// Move the cursor position to the end of your document. | |
builder.MoveToDocumentEnd(); | |
Console.WriteLine("\nThis is the end of the document."); |
Naviguer avec les signets
Vous pouvez marquer un endroit que vous souhaitez trouver et vous y déplacer facilement. Vous pouvez insérer autant de signets que vous le souhaitez dans votre document, puis les parcourir en identifiant les signets avec des noms uniques. Vous pouvez accéder à un signet en utilisant la méthode MoveToBookmark.
Les exemples de code suivants montrent comment déplacer la position du curseur vers un signet:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Start a bookmark and add content to it using a DocumentBuilder. | |
builder.StartBookmark("MyBookmark"); | |
builder.Writeln("Bookmark contents."); | |
builder.EndBookmark("MyBookmark"); | |
// The node that the DocumentBuilder is currently at is past the boundaries of the bookmark. | |
Assert.AreEqual(doc.Range.Bookmarks[0].BookmarkEnd, builder.CurrentParagraph.FirstChild); | |
// If we wish to revise the content of our bookmark with the DocumentBuilder, we can move back to it like this. | |
builder.MoveToBookmark("MyBookmark"); | |
// Now we're located between the bookmark's BookmarkStart and BookmarkEnd nodes, so any text the builder adds will be within it. | |
Assert.AreEqual(doc.Range.Bookmarks[0].BookmarkStart, builder.CurrentParagraph.FirstChild); | |
// We can move the builder to an individual node, | |
// which in this case will be the first node of the first paragraph, like this. | |
builder.MoveTo(doc.FirstSection.Body.FirstParagraph.GetChildNodes(NodeType.Any, false)[0]); |
Accédez aux cellules du tableau
Vous pouvez accéder à une cellule du tableau en utilisant la méthode MoveToCell. Cette méthode vous permettra de naviguer avec votre curseur dans n’importe quelle cellule d’un tableau spécifique. De plus, vous pouvez spécifier un index pour déplacer le curseur vers n’importe quelle position ou caractère spécifié dans une cellule de la méthode MoveToCell.
L’exemple de code suivant montre comment déplacer la position d’un curseur vers une cellule de tableau spécifiée:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(MyDir + "Tables.docx"); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Move the builder to row 3, cell 4 of the first table. | |
builder.MoveToCell(0, 2, 3, 0); | |
builder.Write("\nCell contents added by DocumentBuilder"); | |
Table table = (Table)doc.GetChild(NodeType.Table, 0, true); | |
Assert.AreEqual(table.Rows[2].Cells[3], builder.CurrentNode.ParentNode.ParentNode); | |
Assert.AreEqual("Cell contents added by DocumentBuilderCell 3 contents\a", table.Rows[2].Cells[3].GetText().Trim()); |
Accédez à un champ
Vous pouvez accéder à un champ spécifique de votre document en utilisant la méthode MoveToField. De plus, vous pouvez accéder à un champ de fusion spécifique en utilisant la méthode MoveToMergeField.
L’exemple de code suivant montre comment déplacer le curseur du générateur de documents vers un champ spécifique:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Insert a field using the DocumentBuilder and add a run of text after it. | |
Field field = builder.InsertField("MERGEFIELD field"); | |
builder.Write(" Text after the field."); | |
// The builder's cursor is currently at end of the document. | |
Assert.Null(builder.CurrentNode); | |
// We can move the builder to a field like this, placing the cursor at immediately after the field. | |
builder.MoveToField(field, true); | |
// Note that the cursor is at a place past the FieldEnd node of the field, meaning that we are not actually inside the field. | |
// If we wish to move the DocumentBuilder to inside a field, | |
// we will need to move it to a field's FieldStart or FieldSeparator node using the DocumentBuilder.MoveTo() method. | |
Assert.AreEqual(field.End, builder.CurrentNode.PreviousSibling); | |
builder.Write(" Text immediately after the field."); |
Accédez à un en-tête ou un pied de page
Vous pouvez vous déplacer au début d’un en-tête ou d’un pied de page en utilisant la méthode MoveToHeaderFooter
L’exemple de code suivant montre comment déplacer le curseur du générateur de documents vers un en-tête ou un pied de page de document:
Accédez à une section ou un paragraphe
Vous pouvez accéder à une section ou à un paragraphe spécifique en utilisant les méthodes MoveToParagraph ou MoveToSection. De plus, vous pouvez spécifier un index pour déplacer le curseur vers n’importe quelle position ou vers un caractère spécifié dans un paragraphe au sein de la méthode MoveToParagraph.
L’exemple de code suivant montre comment accéder à une section spécifique et à un paragraphe spécifique dans un document:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
doc.AppendChild(new Section(doc)); | |
// Move a DocumentBuilder to the second section and add text. | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.MoveToSection(1); | |
builder.Writeln("Text added to the 2nd section."); | |
// Create document with paragraphs. | |
doc = new Document(MyDir + "Paragraphs.docx"); | |
ParagraphCollection paragraphs = doc.FirstSection.Body.Paragraphs; | |
Assert.AreEqual(22, paragraphs.Count); | |
// When we create a DocumentBuilder for a document, its cursor is at the very beginning of the document by default, | |
// and any content added by the DocumentBuilder will just be prepended to the document. | |
builder = new DocumentBuilder(doc); | |
Assert.AreEqual(0, paragraphs.IndexOf(builder.CurrentParagraph)); | |
// You can move the cursor to any position in a paragraph. | |
builder.MoveToParagraph(2, 10); | |
Assert.AreEqual(2, paragraphs.IndexOf(builder.CurrentParagraph)); | |
builder.Writeln("This is a new third paragraph. "); | |
Assert.AreEqual(3, paragraphs.IndexOf(builder.CurrentParagraph)); |