นำทางด้วยเคอร์เซอร์
ในขณะที่ทำงานกับเอกสารแม้ว่าจะเป็นหนึ่งสั้นหรือยาวคุณจะต้องนำทางผ่านเอกสารของคุ การนำทางด้วยเคอร์เซอร์เสมือนแสดงถึงความสามารถในการนำทางระหว่างโหนดที่แ.
Withinในเอกสารสั้นๆการเคลื่อนที่ไปมาในเอกสารนั้นง่ายเนื่องจากคุณสามารถย้ายจุดแทรกไ แต่เมื่อคุณมีเอกสารขนาดใหญ่ที่มีหลายหน้า,เทคนิคพื้นฐานเหล่านี้จะไม่เพียงพอ.
บทความนี้อธิบายวิธีการย้ายไปรอบๆในเอกสารและนำทางด้วยเคอร์เซอร์เสมือนไปยังส่วน.
การตรวจจับตำแหน่งเคอร์เซอร์ปัจจุบัน
ก่อนที่จะเริ่มกระบวนการของการนำทางผ่านเอกสารของคุณ,คุณจะต้องได้รับโหนดที่เลือก คุณสามารถดูตำแหน่งที่แน่นอนของเคอร์เซอร์ที่โหนดที่เลือกได้โดยใช้คุณสมบัติCurrentNode นอกจากนี้แทนที่จะได้รับโหนดปัจจุบันคุณจะได้รับย่อหน้าที่เลือกในปัจจุบันหรือส่วนที่เลือกในปัจจุบันโดยใช้คุณสมบัติCurrentParagraphและCurrentSection.
การแทรกการดำเนินการใดๆที่คุณดำเนินการโดยใช้DocumentBuilderจะถูกแทรกก่อนCurrentNode เมื่อย่อหน้าปัจจุบันว่างเปล่าหรือวางเคอร์เซอร์ก่อนสิ้นย่อหน้าการแสดงCurrentNodeเป็นโมฆะ.
การนำทางเมธอดในเอกสาร
เมื่อคุณกำลังแก้ไขข้อความมันเป็นสิ่งสำคัญที่จะรู้วิธีการนำทางเอกสารของคุณและที่ว่าจะ Aspose.Wordsช่วยให้คุณย้ายไปรอบๆในเอกสารและนำทางไปยังส่วนต่างๆและส่วนต่างๆซึ่งคล้ายกับฟังก์ชันการทำงานของบานหน้าต่างนำทางในMicrosoft Wordเพื่อไปยังหน้าเว็บหรือหัวเรื่องในเอกสารคำโดยไม่ต้องเลื่อน.
วิธีการหลักคือการสามารถย้ายตำแหน่งเคอร์เซอร์ไปยังโหนดเฉพาะในเอกสารของคุณ,คุณสามารถบรรลุนี้โดยใช้วิธีการMoveTo.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีย้ายDocumentBuilderไปยังโหนดต่างๆในเอกสาร:
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()); |
แต่นอกเหนือจากวิธีพื้นฐานMoveToยังมีวิธีที่เฉพาะเจาะจงมากขึ้น.
ไปที่จุดเริ่มต้นหรือจุดสิ้นสุดของเอกสาร
คุณสามารถไปที่จุดเริ่มต้นหรือจุดสิ้นสุดของเอกสารของคุณโดยใช้วิธีการMoveToDocumentStartและMoveToDocumentEnd.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการย้ายตำแหน่งเคอร์เซอร์ไปยังจุดเริ่มต้นหรือจุดสิ้นสุดของ:
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."); |
นำทางด้วยบุ๊กมาร์ก
คุณสามารถทำเครื่องหมายสถานที่ที่คุณต้องการค้นหาและย้ายไปที่สถานที่นั้นอีกครั้งได้อย่า คุณสามารถแทรกบุ๊กมาร์กลงในเอกสารของคุณได้มากเท่าที่คุณต้องการและจากนั้นนำทาง คุณสามารถย้ายไปยังบุ๊กมาร์กได้โดยใช้วิธีการMoveToBookmark.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการย้ายตำแหน่งเคอร์เซอร์ไปยังบุ๊กมาร์ก:
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()); |
ไปที่เซลล์ตาราง
คุณสามารถย้ายไปยังเซลล์ตารางได้โดยใช้วิธีการMoveToCell วิธีนี้จะช่วยให้คุณสามารถนำทางเคอร์เซอร์ของคุณไปยังเซลล์ใดๆในตารางที่เฉพาะเจาะจ นอกจากนี้คุณสามารถระบุดัชนีเพื่อเลื่อนเคอร์เซอร์ไปยังตำแหน่งใดๆหรืออักขระที่ระบุในเซลล์ภายในวิธีการMoveToCell.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการย้ายตำแหน่งเคอร์เซอร์ไปยังเซลล์ตารางที่ระบุ:
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"); |
นำทางไปยังฟิลด์
คุณสามารถย้ายไปยังฟิลด์เฉพาะในเอกสารของคุณได้โดยใช้วิธีการMoveToField นอกจากนี้คุณสามารถย้ายไปยังฟิลด์ผสานเฉพาะโดยใช้วิธีการMoveToMergeField.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการย้ายเคอร์เซอร์ตัวสร้างเอกสารไปยังเขตข้อมูลเฉพาะ:
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."); |
ไปที่ส่วนหัวหรือส่วนท้าย
คุณสามารถย้ายไปยังจุดเริ่มต้นของส่วนหัวหรือท้ายกระดาษได้โดยใช้วิธีการMoveToHeaderFooter.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการย้ายเคอร์เซอร์ตัวสร้างเอกสารไปยังส่วนหัวของเอกสา:
ไปยังส่วนหรือย่อหน้า
คุณสามารถย้ายไปยังส่วนหรือย่อหน้าโดยใช้วิธีการMoveToParagraphหรือMoveToSection นอกจากนี้คุณสามารถระบุดัชนีเพื่อเลื่อนเคอร์เซอร์ไปยังตำแหน่งใดๆหรืออักขระที่ระบุในย่อหน้าภายในวิธีการMoveToParagraph.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการย้ายไปยังส่วนที่เฉพาะเจาะจงและย่อหน้าเฉพาะในเอก:
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); |