Navigatie met Cursor
Tijdens het werken met een document, zelfs als het een kort of lang document is, moet u door uw document navigeren. Navigatie met een virtuele cursor vertegenwoordigt de mogelijkheid om te navigeren tussen verschillende knooppunten in een document.
Binnen een kort document is het verplaatsen in een document eenvoudig, omdat u de invoegpositie kunt verplaatsen, zelfs met behulp van de pijltoetsen van het toetsenbord of door met de muis te klikken om de invoegpositie te vinden waar u maar wilt. Maar als je eenmaal een groot document hebt dat veel pagina ' s heeft, zullen deze basistechnieken onvoldoende zijn.
In dit artikel wordt uitgelegd hoe u zich in een document kunt verplaatsen en met een virtuele cursor naar verschillende delen ervan kunt navigeren.
Huidige Cursorpositie Detecteren
Voordat u begint met het navigeren door uw document, moet u het knooppunt ophalen dat momenteel is geselecteerd. U kunt de exacte positie van de cursor op een geselecteerd knooppunt krijgen door de eigenschap CurrentNode te gebruiken. In plaats van het huidige knooppunt te krijgen, kunt u bovendien de momenteel geselecteerde alinea of de momenteel geselecteerde sectie ophalen met behulp van de eigenschappen CurrentParagraph en CurrentSection.
Alle insert-bewerkingen die u uitvoert met de DocumentBuilder worden ingevoegd vóór de CurrentNode. Wanneer de huidige alinea leeg is of de cursor vlak voor het einde van de alinea staat, geeft de CurrentNode nullptr terug.
Navigeren in een Document
Wanneer u tekst bewerkt, is het belangrijk om te weten hoe u door uw document moet navigeren en waar u zich precies in het document moet verplaatsen. Met Aspose.Words kunt u zich verplaatsen in een document en naar de verschillende secties en onderdelen navigeren – Dit is vergelijkbaar met de functionaliteit van het navigatiedeelvenster in Microsoft Word om naar een pagina of kop in een Word document te gaan zonder te scrollen.
De belangrijkste methode is om de cursorpositie te kunnen verplaatsen naar een specifiek knooppunt in uw document, u kunt dit bereiken door de methode MoveTo te gebruiken.
Het volgende codevoorbeeld laat zien hoe de DocumentBuilder naar verschillende knooppunten in een document moet worden verplaatst:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = System::MakeObject<Document>(); | |
auto builder = System::MakeObject<DocumentBuilder>(doc); | |
// Start a bookmark and add content to it using a DocumentBuilder. | |
builder->StartBookmark(u"MyBookmark"); | |
builder->Writeln(u"Bookmark contents."); | |
builder->EndBookmark(u"MyBookmark"); | |
// The node that the DocumentBuilder is currently at is past the boundaries of the bookmark. | |
ASSERT_EQ(doc->get_Range()->get_Bookmarks()->idx_get(0)->get_BookmarkEnd(), builder->get_CurrentParagraph()->get_FirstChild()); | |
// If we wish to revise the content of our bookmark with the DocumentBuilder, we can move back to it like this. | |
builder->MoveToBookmark(u"MyBookmark"); | |
// Now we're located between the bookmark's BookmarkStart and BookmarkEnd nodes, so any text the builder adds will be within it. | |
ASSERT_EQ(doc->get_Range()->get_Bookmarks()->idx_get(0)->get_BookmarkStart(), builder->get_CurrentParagraph()->get_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->get_FirstSection()->get_Body()->get_FirstParagraph()->GetChildNodes(NodeType::Any, false)->idx_get(0)); | |
ASSERT_EQ(NodeType::BookmarkStart, builder->get_CurrentNode()->get_NodeType()); | |
ASSERT_TRUE(builder->get_IsAtStartOfParagraph()); | |
// A shorter way of moving the very start/end of a document is with these methods. | |
builder->MoveToDocumentEnd(); | |
ASSERT_TRUE(builder->get_IsAtEndOfParagraph()); | |
builder->MoveToDocumentStart(); | |
ASSERT_TRUE(builder->get_IsAtStartOfParagraph()); |
Maar naast de basismethode MoveTo zijn er meer specifieke.
Naar het begin of einde van een Document navigeren
U kunt naar het begin of het einde van uw document gaan met de methoden MoveToDocumentStart en MoveToDocumentEnd.
Het volgende codevoorbeeld laat zien hoe u 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-C | |
auto doc = System::MakeObject<Document>(inputDataDir + u"Document.docx"); | |
auto builder = System::MakeObject<DocumentBuilder>(doc); | |
// Move the cursor position to the beginning of your document. | |
builder->MoveToDocumentStart(); | |
builder->Writeln(u"This is the beginning of the document."); | |
// Move the cursor position to the end of your document. | |
builder->MoveToDocumentEnd(); | |
builder->Writeln(u"This is the end of the document."); |
Navigeren Met Bladwijzers
U kunt een plaats markeren die u wilt vinden en er gemakkelijk weer naartoe verhuizen. U kunt zoveel bladwijzers in uw document invoegen als u wilt en er vervolgens doorheen navigeren door de bladwijzers met unieke namen te identificeren. U kunt naar een bladwijzer gaan met de methode MoveToBookmark.
De volgende codevoorbeelden laten zien hoe u een cursorpositie naar een bladwijzer verplaatst:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = System::MakeObject<Document>(); | |
auto builder = System::MakeObject<DocumentBuilder>(doc); | |
// Start a bookmark and add content to it using a DocumentBuilder. | |
builder->StartBookmark(u"MyBookmark"); | |
builder->Writeln(u"Bookmark contents."); | |
builder->EndBookmark(u"MyBookmark"); | |
// If we wish to revise the content of our bookmark with the DocumentBuilder, we can move back to it like this. | |
builder->MoveToBookmark(u"MyBookmark"); | |
// Now we're located between the bookmark's BookmarkStart and BookmarkEnd nodes, so any text the builder adds will be within it. | |
ASSERT_EQ(doc->get_Range()->get_Bookmarks()->idx_get(0)->get_BookmarkStart(), builder->get_CurrentParagraph()->get_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->get_FirstSection()->get_Body()->get_FirstParagraph()->GetChildNodes(NodeType::Any, false)->idx_get(0)); | |
ASSERT_EQ(NodeType::BookmarkStart, builder->get_CurrentNode()->get_NodeType()); |
Navigeer naar tabelcellen
U kunt naar een tabelcel gaan met de methode MoveToCell. Met deze methode kunt u met uw cursor naar een cel in een specifieke tabel navigeren. Bovendien kunt u een index opgeven om de cursor naar een willekeurige positie of opgegeven teken in een cel binnen de methode MoveToCell te verplaatsen.
Het volgende codevoorbeeld toont hoe u een cursorpositie naar een opgegeven tabelcel verplaatst:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = System::MakeObject<Document>(inputDataDir + u"Tables.docx"); | |
auto builder = System::MakeObject<DocumentBuilder>(doc); | |
// Move the builder to row 3, cell 4 of the first table. | |
builder->MoveToCell(0, 2, 3, 0); | |
builder->Write(u"\nCell contents added by DocumentBuilder"); | |
auto table = System::DynamicCast<Tables::Table>(doc->GetChild(NodeType::Table, 0, true)); | |
ASSERT_EQ(table->get_Rows()->idx_get(2)->get_Cells()->idx_get(3), builder->get_CurrentNode()->get_ParentNode()->get_ParentNode()); | |
ASSERT_EQ(table->get_Rows()->idx_get(2)->get_Cells()->idx_get(2)->GetText().Trim(), u"Cell contents added by DocumentBuilderCell 3 contents\a"); |
Naar een veld navigeren
U kunt naar een specifiek veld in uw document gaan met de methode MoveToField. Bovendien kunt u naar een specifiek samenvoegveld gaan met de methode MoveToMergeField.
Het volgende codevoorbeeld laat zien hoe u de Document builder-cursor naar een specifiek veld verplaatst:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = System::MakeObject<Document>(); | |
auto builder = System::MakeObject<DocumentBuilder>(doc); | |
// Insert a field using the DocumentBuilder and add a run of text after it. | |
auto field = builder->InsertField(u"MERGEFIELD field"); | |
builder->Write(u" Text after the field."); | |
// The builder's cursor is currently at end of the document. | |
ASSERT_EQ(builder->get_CurrentNode(), nullptr); | |
// 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_EQ(field->get_End(), builder->get_CurrentNode()->get_PreviousSibling()); | |
builder->Write(u" Text immediately after the field."); |
Naar een kop-of voettekst navigeren
U kunt naar het begin van een kop-of voettekst gaan met de methode MoveToHeaderFooter.
Het volgende codevoorbeeld laat zien hoe u de cursor van document builder verplaatst naar een kop-of voettekst van een document:
Naar een sectie of alinea navigeren
U kunt naar een specifieke sectie of alinea gaan met behulp van de methoden MoveToParagraph of MoveToSection. Bovendien kunt u een index opgeven om de cursor naar een willekeurige positie of een opgegeven teken in een alinea binnen de methode MoveToParagraph te verplaatsen.
Het volgende codevoorbeeld toont hoe u naar een specifieke sectie en een specifieke alinea in een document kunt gaan:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// Create a blank document and append a section to it, giving it two sections. | |
auto doc = System::MakeObject<Document>(); | |
doc->AppendChild(System::MakeObject<Section>(doc)); | |
// Move a DocumentBuilder to the second section and add text. | |
auto builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->MoveToSection(1); | |
builder->Writeln(u"Text added to the 2nd section."); | |
// Create document with paragraphs. | |
auto doc = System::MakeObject<Document>(inputDataDir + u"Paragraphs.docx"); | |
auto paragraphs = doc->get_FirstSection()->get_Body()->get_Paragraphs(); | |
ASSERT_EQ(paragraphs->get_Count(), 22); | |
// 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. | |
auto builder = System::MakeObject<DocumentBuilder>(doc); | |
ASSERT_EQ(paragraphs->IndexOf(builder->get_CurrentParagraph()), 0); | |
// You can move the cursor to any position in a paragraph. | |
builder->MoveToParagraph(0, 14); | |
ASSERT_EQ(paragraphs->IndexOf(builder->get_CurrentParagraph()), 2); | |
builder->Writeln(u"This is a new third paragraph. "); | |
ASSERT_EQ(paragraphs->IndexOf(builder->get_CurrentParagraph()), 3); |