Navigare cu cursorul mouse-ului

Când lucrezi cu un document, chiar dacă este scurt sau lung, va trebui să navighezi prin documentul tău. Navigarea cu un cursor virtual reprezintă capacitatea de a naviga între noduri diferite dintr-un document.

În cadrul unui document scurt, navigarea este simplă deoarece poți muta punctul de inserare și prin intermediul tastelor săgeată ale tastaturii sau făcând clic cu butonul mouse-ului pentru a plasa punctul de inserare oriunde dorești. Dar odată ce ai un document mare care are multe pagini, aceste tehnici de bază vor fi insuficiente.

Acest articol explică modul în care se poate deplasa într-un document și naviga cu un cursor virtual către diferite părți ale acestuia.

Detectarea poziţiei cursorului curent

Înainte de a începe procesul de navigare prin documentul dvs., va trebui să obțineți nodul care este selectat în prezent. Poți obține poziția exactă a cursorului la un nod selectat folosind proprietatea CurrentNode. În plus, în loc să obții nodul curent, poți obține paragraful selectat sau secțiunea selectată folosind proprietățile CurrentParagraph și CurrentSection.

“Orice operații de inserare pe care le efectuați folosind DocumentBuilder vor fi introduse înaintea CurrentNode”. Când paragraf actual este gol sau cursorul este poziționat chiar înainte de sfârşitul paragrafului, CurrentNode returnează null.

Metodele de navigare într-un document

Când editezi un text, este important să știi cum să navighezi prin document și unde exact să te deplasezi. Aspose.Words îți permite să te deplasezi în cadrul unui document și să navighezi către diferitele secțiuni și părți ale acestuia – acest lucru asemănător funcționalității panoului de navigare din Microsoft Word pentru a ajunge la o pagină sau o antet dintr-un document Word fără a derula.

Metoda principală este să poți muta poziția cursorului la un anumit nod din documentul tău; poți realiza acest lucru folosind metoda MoveTo.

Exemplul următor de cod arată cum să mutați DocumentBuilder la noduri diferite într-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);

Dar, pe lângă metoda de bază MoveTo, există metode mai specifice.

Puteți să mergeți la începutul sau sfârșitul documentului dvs. folosind MoveToDocumentStart și MoveToDocumentEnd metodele.

Exemplul următor de cod arată cum să mute poziția cursorului la începutul sau sfârșitul unui 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.");

Poţi marca un loc pe care vrei să-l găseşti şi te poţi deplasa cu uşurinţă către el din nou. Puteți insera în documentul dumneavoastră atâtea semnale de carte cât doriți și apoi să navigați prin ele identificându-le pe cele cu nume unice. Puteți muta la un marcaj folosind metoda MoveToBookmark.

Următorul exemplu de cod arată cum se mută poziția cursorului către un bookmark:

// 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]);

Poţi să te muţi într-o celulă de tabel folosind MoveToCell metoda. Această metodă va permite să navigați cursorul către orice celulă într-o anumită tabelă. “În plus, puteți specifica un indice pentru a muta cursorul la orice poziție sau la un caracter specific într-o celulă în metoda MoveToCell.”

Exemplul de cod următor arată cum să se mute poziția cursorului într-o anumită celulă de tabelă:

// 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());

Puteți să vă mutați către un anumit câmp în documentul dvs. folosind metoda MoveToField. În plus, poți să te muți la un câmp specific prin folosirea metodei MoveToMergeField.

Exemplul următor de cod arată cum să mutați cursorul constructorului de documente către un câmp specific:

// 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.");

Puteți să vă mutați la începutul unui antet sau subsol folosind MoveToHeaderFooter metoda

Exemplul de cod următor arată cum se deplasează cursorul constructorului de documente la un antet sau subsol de 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);
// Specify that we want headers and footers different for first, even and odd pages.
builder.PageSetup.DifferentFirstPageHeaderFooter = true;
builder.PageSetup.OddAndEvenPagesHeaderFooter = true;
// Create the headers.
builder.MoveToHeaderFooter(HeaderFooterType.HeaderFirst);
builder.Write("Header for the first page");
builder.MoveToHeaderFooter(HeaderFooterType.HeaderEven);
builder.Write("Header for even pages");
builder.MoveToHeaderFooter(HeaderFooterType.HeaderPrimary);
builder.Write("Header for all other pages");
// Create two pages in the document.
builder.MoveToSection(0);
builder.Writeln("Page1");
builder.InsertBreak(BreakType.PageBreak);
builder.Writeln("Page2");
doc.Save(ArtifactsDir + "AddContentUsingDocumentBuilder.MoveToHeadersFooters.docx");

Puteți să treceți la o secțiune sau paragraf specific folosind MoveToParagraph sau MoveToSection metode. În plus, poți specifica un index pentru a muta cursorul la orice poziție sau un caracter specific într-un paragraf folosind metoda MoveToParagraph.

Exemplul următor de cod arată cum să se meargă la o secțiune și un paragraf specific într-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));