Trong cây Thuộc tính Nodes.Items(i) cũng trả về nút i Thuộc tính Nodes.Count cho biết hiện tại đang có bao nhiêu nút thuộc cây.

Một phần của tài liệu BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN - CHƯƠNG 4 (Trang 25 - 28)

Nodes.Count cho biết hiện tại đang có bao nhiêu nút thuộc cây.

• Ngoài ra còn một số thuộc tính qui định dáng vẻ hiển thị của cây như Hover, HideSelection, LabelEdit v.v…Các thuộc tính này có thể đặt bằng mã lệnh HideSelection, LabelEdit v.v…Các thuộc tính này có thể đặt bằng mã lệnh hoặc đặt trong khi thiết kế.

• Thủ tục sự kiện Click sẽ được kích hoạt khi người dùng click vào một nút trong cây. Khi đó ta thường tham chiếu đến thuộc tính SelectedItem. trong cây. Khi đó ta thường tham chiếu đến thuộc tính SelectedItem.

b. Chương trình mu

Form1.frm

Option Explicit

Dim STT As Integer '/// Biến ghi số lượng phần tử. Sẽ tựđộng tăng để không xung đột.

'///---

'/// Đọc giá trị của nút hiện tại (nút được chọn) và hiển thị 2 trường là Key và Text ra màn hình '///Thuộc tính SelectedItem trả về nút đang được chọn. Nếu không có nút nào được chọn thì '/// thuộc tính này có giá trị là NOTHING. Do vậy cần kiểm tra bằng câu lệnh If … is nothing … '///---

PrivateSub cmdDocGiaTri_Click() Dim NutHienTai As Node

Set NutHienTai = tvwDSSV.SelectedItem If NutHienTai Is Nothing ThenExit Sub

MsgBox "Key = " & NutHienTai.Key & ". Text = " & NutHienTai.Text

End Sub

'///--- '/// Xin giới thiệu 2 cách đểđọc (Duyệt) cây. Dùng cấu trúc cây và tập hợp

PrivateSub cmdDocTatCa_Click() Dim Nut As Node

For Each Nut In tvwDSSV.Nodes

Debug.Print "Key = " & Nut.Key & vbTab & vbTab & " Text = " & Nut.Text Next

'/// Cách 2 (Sử dụng khái niệm tập hợp (Collection).

Dim i As Integer

For i = 1 To tvwDSSV.Nodes.Count

Debug.Print tvwDSSV.Nodes.Item(i).Key &",Text=" & tvwDSSV.Nodes.Item(i).Text

Next End Sub

'///--- '/// Thủ tục in tất cả các nút anh em liền kề (Cùng mức) trong cây

PrivateSub cmdPrintAnhEm_Click() Dim Nut As Node

If tvwDSSV.SelectedItem Is Nothing ThenExit Sub

Set Nut = tvwDSSV.SelectedItem.FirstSibling '/// Trỏđến nút "anh cả"

'/// sau đó Print các nút, từ vị trí "Anh cả" cho đến hết

Do While Not (Nut Is Nothing) (adsbygoogle = window.adsbygoogle || []).push({});

Debug.Print "Key = " & Nut.Key & vbTab & " Text = " & Nut.Text Set Nut = Nut.Next '/// Trỏđến nút ngay cạnh

Loop End Sub

'///--- '/// In nút cha của nút đang được chọn. Ởđây SelectedItem trả về nút hiện tại

'/// Thuộc tính Parent trả về nút cha. (Cần kiểm tra xem có tồn tại trước khi thao tác)

PrivateSub cmdPrintCha_Click() Dim NutCha As Node

If tvwDSSV.SelectedItem Is Nothing ThenExit Sub

Set NutCha = tvwDSSV.SelectedItem.Parent

If Not (NutCha Is Nothing) Then

MsgBox "Giá trị Key = " & NutCha.Key & vbTab & "Text=" & NutCha.Text

End If End Sub

'///--- '/// Thủ tục thêm một nút vào trong cây. Cú pháp của phương thức thêm nút như sau:

'/// Ví dụ: tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Con1", "Con thứ 1", "icoFace" sẽ

'/// thêm một nút có tên (Key) là Con1, nhãn hiển thị là "con thứ 1", biểu tượng hiển thị là icoFace '/// (nằm trong imageList).

'/// Còn lệnh : tvwDSSV.Nodes.Add "Con1", tvwNext, "Em1", "Con thứ 2", "icoFace" '/// sẽ thêm vào một nút là anh em (cùng mức) của nút "Con1" (tức là con của "NUT_GOC")

PrivateSub cmdThem_Click() Dim NutHienTai As Node

Set NutHienTai = tvwDSSV.SelectedItem If NutHienTai Is Nothing ThenExit Sub

tvwDSSV.Nodes.Add NutHienTai.Key, tvwChild, txtMaSV.Text, txtHoVaTen.Text, "icoFace"

NutHienTai.Expanded = True '/// Mở (Expend) nút đó ra

STT = STT + 1

txtMaSV.Text = "SV" & STT '/// Đểđảm bảo các Key không trùng nhau

End Sub

'///--- '/// Xoá nút đang chọn. Phương thức Remove cần chỉ số của nút cần xoá.

'/// Chỉ số này tựđộng được lưu trong thuộc tính Index

PrivateSub cmdXoaNut_Click()

If tvwDSSV.SelectedItem Is Nothing ThenExit Sub '/// Nếu không có nút thì thoát

tvwDSSV.Nodes.Remove tvwDSSV.SelectedItem.Index

End Sub (adsbygoogle = window.adsbygoogle || []).push({});

'///---

PrivateSub cmdXoaTat_Click()

tvwDSSV.Nodes.Clear '/// Phương thức Clear dùng để xoá một tập hợp nói chung

End Sub

'///---

PrivateSub cmdPrintNutCon_Click() Dim X As Node, N As Node

Set X = tvwDSSV.SelectedItem If X Is Nothing ThenExit Sub

If X.children = 0 ThenExit Sub

Set X = X.Child

Do While Not (X Is Nothing)

Debug.Print "Key = " & X.Key & vbTab & "Text = " & X.Text Set X = X.Next

Loop End Sub

'///---

PrivateSub Form_Load()

'/// 3 dòng này có thể bỏ qua nếu bạn thêm vào imlBieuTuong 1 biểu tượng tên là "icoFace"

'/// trong lúc thiết kế (vào phần Properties). Ởđây xin thêm bằng mã lệnh.

imlBieuTuong.ImageHeight = 16 imlBieuTuong.ImageWidth = 16

imlBieuTuong.ListImages.Add , "icoFace", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Misc\FACE02.ICO")

tvwDSSV.HideSelection = False '/// Luôn tô sáng mục được chọn

tvwDSSV.LabelEdit = tvwManual '/// Không cho sửa đổi nhãn của nút

tvwDSSV.ImageList = imlBieuTuong '/// Sẽ lấy biểu tượng chứa trong imlBieuTuong

'/// Thêm một nút gốc vào cây

tvwDSSV.Nodes.Add , , "NUT_GOC", "Trường ĐHSPKTHY"

'/// Thêm một số nút con (mức 1) vào sau nút gốc

tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Khoa CNTT", "Khoa CNTT" tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Khoa CK", "Khoa Cơ Khí" tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Khoa CB", "Khoa Cơ bản"

tvwDSSV.Nodes.Add "NUT_GOC", tvwChild,"Khoa CKDL","Khoa Cơ khí động lực" tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Khoa D-DT", "Khoa Điện - Điện tử" tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Khoa MayTKTT", "Khoa May & TKTT" tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Khoa SPKT", "Khoa SPKT"

tvwDSSV.Nodes("NUT_GOC").Expanded = True '/// Mở rộng nút gốc STT = 1 txtMaSV.Text = "SV" & STT txtMaSV.Enabled = False

'/// Thêm một ô nữa trong Panel (Mặc định mỗi Panel chỉ có một ô) (adsbygoogle = window.adsbygoogle || []).push({});

staThongTinThem.Panels.Add , , "Giá trị Text của nút được chọn" staThongTinThem.Panels(1).Text = "Giá trị key của nút đựơc chọn"

End Sub

'///--- '/// Hiển thị thông tin của nút vừa được chọn khi người dùng click chuột

PrivateSub tvwDSSV_Click()

staThongTinThem.Panels(1).Text = "Key = " & tvwDSSV.SelectedItem.Key staThongTinThem.Panels(2).Text = "Text = " & tvwDSSV.SelectedItem.Text

End Sub

c. Ghi chú: Tại mỗi một nút bất kỳ, ta có thể chuyển đến các nút cha, nút con, nút anh em liền kề và "Anh cả", "em út" một cách dễ dàng thông qua các thuộc tính anh em liền kề và "Anh cả", "em út" một cách dễ dàng thông qua các thuộc tính tương ứng. Hình dưới đây sẽ minh hoạ rõ nét hơn :

Một phần của tài liệu BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN - CHƯƠNG 4 (Trang 25 - 28)