Navigatie met cursor
Tijdens het werken met een document, zelfs als het een korte of lange, moet u navigeren door uw document. Navigatie met een virtuele cursor is de mogelijkheid om te navigeren tussen verschillende knooppunten in een document.
Binnen een kort document is bewegen in een document eenvoudig omdat je het invoegpunt kunt verplaatsen, zelfs door de pijltjestoetsen van het toetsenbord te gebruiken of door op de muis te klikken om het invoegpunt te lokaliseren waar je maar wilt. Maar als je eenmaal een groot document met veel pagina’s hebt, zullen deze basistechnieken onvoldoende zijn.
Dit artikel legt uit hoe je in een document kunt bewegen en navigeren met een virtuele cursor naar verschillende delen ervan.
Huidige cursorpositie wordt gedetecteerd
Voordat u het proces van het navigeren door uw document start, moet u de knoop die momenteel is geselecteerd krijgen. U kunt de exacte positie van de cursor op een geselecteerde knooppunt door gebruik te maken van de CurrentNode eigendom. Bovendien, in plaats van het huidige knooppunt te krijgen, kunt u de huidige geselecteerde paragraaf of de huidige geselecteerde sectie door middel van de CurrentParagraph en CurrentSection eigenschappen.
Alle invoegacties die u uitvoert met behulp van de DocumentBuilder vóór de CurrentNode. Wanneer de huidige paragraaf leeg is of de cursor vlak voor het einde van de paragraaf is geplaatst, CurrentNode Geeft nul terug.
Navigatiemethoden in een document
Wanneer u tekst bewerkt, is het belangrijk om te weten hoe u uw document kunt navigeren en waar u precies moet bewegen. Aspose.Words kunt u bewegen in een document en navigeren naar de verschillende secties en delen Microsoft Word naar een pagina gaan of naar een Word-document gaan zonder te scrollen.
De belangrijkste methode is om de cursor positie te verplaatsen naar een specifieke knooppunt in uw document, kunt u dit bereiken met behulp van de MoveTo methode.
Het volgende voorbeeld van code laat zien hoe u de DocumentBuilder naar verschillende knooppunten in een 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); |
Maar naast de basis MoveTo methode, zijn er meer specifieke.
Navigeren naar begin of einde van een document
U kunt naar het begin of het einde van uw document met behulp van de MoveToDocumentStart en MoveToDocumentEnd methoden.
Het volgende voorbeeld van code laat zien hoe je de cursorpositie naar het begin of het einde van een document verplaatst:
// 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."); |
Navigeren met bladwijzers
U kunt een plek markeren die u wilt vinden en opnieuw gemakkelijk verplaatsen. U kunt zoveel bladwijzers in uw document plaatsen als u wilt, en er vervolgens doorheen navigeren door de bladwijzers met unieke namen te identificeren. U kunt naar een bladwijzer verplaatsen met behulp van de MoveToBookmark methode.
De volgende codevoorbeelden laten zien hoe je een cursorpositie naar een bladwijzer verplaatst:
// 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]); |
Naar tabelcellen navigeren
U kunt verplaatsen naar een tabel cel door gebruik te maken van de MoveToCell methode. Met deze methode kunt u uw cursor in elke cel in een specifieke tabel navigeren. Daarnaast kunt u een index opgeven om de cursor naar elke positie of opgegeven teken in een cel binnen de MoveToCell methode.
Het volgende voorbeeld van code laat zien hoe je een cursorpositie naar een bepaalde tabelcel verplaatst:
// 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()); |
Navigeren naar een veld
U kunt verplaatsen naar een specifiek veld in uw document met behulp van de MoveToField methode. Daarnaast kun je naar een specifiek merge veld verhuizen door gebruik te maken van de MoveToMergeField methode.
Het volgende voorbeeld van code laat zien hoe u de documentbouwer naar een specifiek veld kunt verplaatsen:
// 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."); |
Navigeren naar een kop- of voettekst
U kunt verplaatsen naar het begin van een header of voettekst door gebruik te maken van de MoveToHeaderFooter methode
Het volgende voorbeeld van code laat zien hoe documentbouwer naar een documentkoptekst of -voettekst verplaatst moet worden:
Navigeren naar een afdeling of paragraaf
U kunt naar een specifieke sectie of paragraaf door gebruik te maken van de MoveToParagraph of MoveToSection methoden. Daarnaast kunt u een index opgeven om de cursor te verplaatsen naar elke positie of een gespecificeerd teken in een alinea binnen de MoveToParagraph methode.
Het volgende voorbeeld van een code laat zien hoe je naar een specifieke sectie en een specifieke paragraaf in een document kunt gaan:
// 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)); |