Visual Basic

Home

Visual Basic Tutorial
Knowledge Developer Database Internet Resource
Common Control 1
1. Common Control 1
2. Image List
3. List View
4. Tree View
5. Image Combo
6. Status Bar และ Progress Bar
 
Visual Basic Tutorial
1. Visual Basic 6
2. ฟอร์ม
3. Intrinsic Control
4. ตัวแปรและ Procedure
5. Class
6. Common Control1
7. Common Control2
8. ActiveX Control
9. Interface
10. ฐานข้อมูล
11. Database Control
 
Developer
Visual Basic
Microsoft Access
Microsoft Excel
 

Tree View

Tree view เป็น Windows Common control ที่ผู้ใช้คุ้นเคยเนื่องจากคล้ายกับ Windows Explorer ลักษณะพื้นฐานของ Tree view แสดงรายการตามลำดับขั้น และมีลักษณะสำหรับระบุรายการย่อยที่สามารถแสดงหรือรวมได้ Tree view แสดงเป็น Node collection

การตั้งค่าคุณสมบัติเมื่อออกแบบ

เมื่อวาด Tree view ลงบนฟอร์ม ให้เปิดไดอะล๊อกบ๊อกซ์ของคุณสมบัติด้วยการคลิกที่ตัว control แล้วไปที่เมนู View เลือก Property Page หรือคลิกเมาส์ปุ่มขวาบนตัว control แล้วเลือก Properties

คุณสมบัติ Style มีผลกับกราฟฟิกของส่วนประกอบ โดย Tree view สามารถแสดงได้ 4 แบบ คือข้อความกับอ๊อบเจค Node, ภาพกับอ๊อบเจค Node, เครื่องหมายบวกหรือลบหน้าอ๊อบเจค Node และเส้นที่ออกจากอ๊อบเจค Node แต่ละอ๊อบเจคไปยังอ๊อบเจคลูก โดยส่วนมากใช้ตามค่าเริ่มต้น คือ 7-tvwtreelinePlusMinusPictureText

คุณสมบัติ LineStyle มีผลกับเส้นโดยค่า 0-tvwTreeLines ไม่แสดงเส้นระหว่าง root ของอ๊อบเจค Node ซึ่งค่านี้เป็นค่าเริ่มต้น ค่า 1-tvwRootLines แสดงเส้นระหว่าง root ของอ๊อบเจค Node และจากลูกไปยัง Node ในระดับที่สูงกว่า

คุณสมบัติ Indentation ระบุระยะเป็น twips ระหว่าง แนวตั้งของบรรทัดว่าง

คุณสมบัติ LabelEdit มีผลต่อการให้ผู้ใช้ปรับปรุงข้อความของแต่ละอ๊อบเจค Node ถ้ากำหนดค่า 0-tvwAutomatic (เป็นค่าเริ่มต้น) ผู้ใช้สามารถแก้ไขข้อความโดยการคลิกบน Node ขณะเรียกใช้กำหนดค่า 1- tvwManual การแก้ไขทำได้เฉพาะโปรแกรม โดยการใช้ เมธอด StartLabelEdit

คุณสมบัติ ImageList มีรายการ Image list ให้เลือกสำหรับการดึงภาพของแต่ละอ๊อบเจค Node ซึ่งเป็น Image list ที่อยู่บนฟอร์มปัจจุบัน

Tip: การสร้างความสัมพันธ์ระหว่าง Tree view กับ Image list ที่อยู่บนฟอร์มอื่น ทำได้โดยการกำหนดขณะเรียกใช้ ด้วยคำสั่ง

Private Sub Form_Load ( )
   Set TreeView1.ImageList = AnotherForm.ImageList1
End Sub

คุณสมบัติ HideSelection ใช้หาว่าอ๊อบเจค Node ที่เลือกยังคงไฮไลต์ เมื่อ Tree view ไม่ได้รับโฟกัส

คุณสมบัติ PathSeparator ระบุเครื่องหมายหรือตัวอักษรที่ใช้ในคุณสมบัติ FullPath ของอ๊อบเจค Node ซึ่งมีค่าเริ่มต้นเป็นเครื่องหมาย \

คุณสมบัติ Store ระบุ Node ในตัว control เรียงตามลำดับตัวอักษร

คุณสมบัติมีผลเฉพาะ root Node ไม่มีผลกับอ๊อบเจค ลูกในระดับต่ำกว่า

คุณสมบัติ FullRowSelect เป็นคุณสมบัติใหม่ที่มากับ Visual Basic 6 ถ้าเป็น True จะทำให้ Node ของตัว control ได้รับการเลือกเมื่อผู้ใช้คลิกที่ตำแหน่งใดๆ บนแถว แต่ค่าเริ่มต้น เป็น False การเลือกเกิดขึ้นเมื่อคลิก Node หรือเครื่องหมายบวกหรือลบ

คุณสมบัติ CheckBoxes ถ้าเป็น True จะมี Check box หน้า Node ทำให้ผู้ใช้สามารถเลือกแบบหลายอ๊อบเจค Node

คุณสมบัติ SingleSel ตามปกติการขยายหรือรวมรายการ Node จะต้องดับเบิลคลิก แต่ถ้าให้ SingleSel เป็น True ใช้การคลิกเพียงครั้งเดียว

คุณสมบัติ Scroll ใช้หาว่า Tree view ควรแสดงแถบเลื่อนแนวตั้งหรือแนวนอน ถ้าจำเป็นตามปกติมี

Note: คุณสมบัติ FullRowSelect, CheckBoxes, SingleSel, Scroll เป็นคุณสมบัติใหม่ใน Visual Basic 6 มีค่าเริ่มต้นเป็น True

คุณสมบัติ HotTracking เป็นการสร้างอินเตอร์เฟซแบบเว็บ ถ้ากำหนดเป็น True เคอร์เซอร์จะเปลี่ยนเป็นรูปมือ เมื่อเมาส์ผ่านอ๊อบเจค Node และข้อความของ Node จะมีเส้นใต้

การทำงานเมื่อเรียกใช้

ศักยภาพของ Tree view ที่ใช้ในการประยุกต์มาจาก Node collection และคุณสมบัติและเมธอดของอ๊อบเจค Node

การเพิ่มอ๊อบเจค Node

การเพิ่มรายการให้กับ Tree view ทำได้ขณะที่เรียกใช้ด้วยการใช้เมธอด Add ของ Node collection ซึ่งเมธอด Add มีไวยากรณ์ ดังนี้

Add ([Relative], [Relationship], [Key], [Text], [Image], [SelectedImage]) As Node

Relative และ Relationship ชี้ตำแหน่งที่ควรแทรก Node ใหม่
Key คือ string key ใน Node collection
Text คือ ข้อความที่จะปรากฏในตัว control
Image เป็น ดัชนีหรือ string key ใน Image list ที่จะใช้ปรากฏหน้า Node
SelectedImage เป็น ดัชนี หรือ คีย์ ของภาพที่ใช้เมื่อมีการเลือก Node

Dim nod Ad Node
Set nod = Add (, , , "C\system", "Folder", "OpenFolder")

Sub ShowDbStructure(MdbFile As String, Tree As TreeView, _
ShowSystemTables As Boolean)
   Dim db As DAO.Database, td As DAO.TableDef, fld As DAO.Field
   Dim nod1 As Node, nod2 As Node
   ' ลบข้อมูลปัจจุบันของ tree view
   Tree.Nodes.Clear

   ' เปิดฐานข้อมูล
   Set db = DBEngine.OpenDatabase(MdbFile)
   ' การ root ของโหนด แล้วขยายออกเพื่อแสดง table
   Set nod1 = Tree.Nodes.Add(, , "Root", db.Name, "Database")
   nod1.Tag = DatabaseInfo(db)
   nod1.Expanded = True

   ' สำรวจ table ทั้งหมดในฐานข้อมูล
   For Each td In db.TableDefs
      ' ไม่แสดง system table ถ้าไม่เลือก แสดง system table
      If (td.Attributes And dbSystemObject) = 0 Or ShowSystemTables Then
         ' เพิ่ม table ภายใต้อ๊อบเจค root
         Set nod1 = Tree.Nodes.Add("Root", tvwChild, , td.Name, "Table")
         nod1.Tag = TableDefInfo(td)
         ' เพิ่มฟิลด์ทั้งหมด
         For Each fld In td.Fields
            Set nod2 = Tree.Nodes.Add(nod1.Index, tvwChild, , fld.Name, "Field")
            nod2.Tag = FieldInfo(fld)
         Next
      End If
   Next
   db.Close
End Sub

ลักษณะภายนอกและการมองเห็น

การควบคุมลักษณะภายนอกของแต่ละอ๊อบเจค Node ใช้การตั้งค่าคุณสมบัติ ForeColor, BackColor และ Bold ตามปกติ การตั้งคุณสมบัติเหล่านี้ทำเมื่อเพิ่มรายการใหม่เข้าไปยัง Node collection

With TV.Nodes.Add ( , , , "New Node")
   .Bold = True
   .ForeColor = vbRed
   .BackColor = vbYellow
End With

แต่ละอ๊อบเจค Node มีความสัมพันธ์กับภาพ 3 ภาพ คือ คุณสมบัติ Image เป็น ดัชนีของภาพที่เป็นค่าเริ่มต้น คุณสมบัติ SelectedImage เป็น ดัชนีของภาพที่ใช้ เมื่อเลือก Node และคุณสมบัติ ExtendedImage เป็น ดัชนีของภาพที่ใช้เมื่อมีการขยาย Node โดยคุณสมบัติ Image และ SelectedImage สามารถตั้งค่าได้เมื่อมีการเพิ่มรายการเข้าไปใน Node collection ด้วย เมธอด Add ส่วนคุณสมบัติ ExtendedImage กำหนดภายหลังที่เพิ่มรายการใน collection

กำหนดการมองเห็น Node ด้วยคุณสมบัติ Visible รายการของ Node ไม่สามารถมองเห็นได้เพราะมีการขยาย Tree หรือมีการเลื่อนพื้นที่ที่มองเห็นได้ คุณสมบัตินี้เป็นแบบอ่านอย่างเดียว แต่สามารถบังคับให้เห็นได้โดยการประมวลผล Node ด้วยเมธอด EnsureVisible

If aNode.Visible = False Then aNode.EnsureVisible

การรับรู้ว่ามี Node ที่มองเห็นได้ในตัว control ด้วยเมธอด GetVisibleCount

การหา Node ปัจจุบันที่ได้รับการเลือก ทำได้โดยการสอบถามคุณสมบัติ Selected หรือทดสอบคุณสมบัติ SelectedItem ใน Tree view

วิธีที่ 1
If aNode.Selected Then MsgBox "Selected"

วิธีที่ 2
If TreeView1.SelectedItem Is Anode Then MsgBox "Selected"

การทำให้ Node ที่กำหนดเป็น Node ปัจจุบันที่เลือก

วิธีที่ 1
aNode.Selected = True

วิธีที่ 2
Set TreeView1.SelectedItem = aNode

การแสดงสารสนเทศของ Node

การแสดงสนเทศของ Node ใช้ Node Click event และหาสารสนเทศจากคุณสมบัติ Index หรือ Key

Private Sub treDatabase_NodeClick(ByVal Node As MSComctlLib.Node)
   ' info() เป็น array ของข้อความที่เก็บข้อมูลของโหนด
   lblDetails.Caption = Node.Tag
End Sub

ตามปกติ คุณสมบัติ Key น่าเชื่อถือมากกว่าคุณสมบัติ Index
NodeClick event แตกต่างจาก Click event ธรรมดา คือ NodeClick เกิด event คลิกบนอ๊อบเจค Node ส่วน Click เกิด event เมื่อคลิกบน Tree view

การแก้ไขข้อความของ Node

ตามค่าเริ่มต้นผู้ใช้สามารถคลิกที่อ๊อบเจค Node เพื่อเข้าสู่โหมดแก้ไข และเปลี่ยนคุณสมบัติ Text ทางอ้อม ถ้าคุณสมบัติ LabelEditor กำหนดเป็น 1-tvwManual การแก้ไขทำได้โดยการประมวลผลเมธอด StartLabelEditor

วิธีกรองการแก้ไขคุณสมบัติ Text ทำได้ด้วยการจับ instance เมื่อเริ่มแก้ไข คำสั่งใน BeforeLabelEdit event procedure ถ้าต้องการยกเลิกการทำงานให้ตั้งค่าพารามิเตอร์ Cancel เป็น True

Private Sub TreeView1_BeforeLabelEdit (Cancel As Integer)
   ' ป้องกันคุณสมบัติ Text ของ root Node จากการแก้ไข
   If TreeView1.SelectedItem.Key = "Root" Then Cancel = True
End Sub

เมื่อมีการแก้ไขคุณสมบัติ Text จะสามารถจับ AfterLabelEdit event ซึ่งสามารถนำ event นี้ตรวจสอบค่าที่นำเข้าได้ เช่น การปฏิเสธข้อความว่าง

Private Sub TreeView1_AfterLabelEdit (Cancel As Integer, NewString As String)
   If Len (NewString) = 0 Then Cancel = True
End Sub

ดาวน์โหลดตัวอย่าง (BrowMDB.vbp)

 

  

สงวนลิขสิทธิ (C) widebase