A. Giới thiệu .
Microsoft Tree View Control là một phần của Microsoft Windows Common Controls. Nó là một phần thú vị của Đối tượng hiển thị dữ liệu liên quan trong một hệ thống phân cấp các nút. Nó có thể hiển thị dữ liệu liên quan, như các mục nhập và mục nhập con trong Danh sách chỉ mục hoặc danh sách các thư mục như Ngăn bên trái của Windows Explorer hoặc Danh sách các mục liên quan trong cấu trúc phân cấp với Đường cây, Hộp kiểm và Đồ họa hình ảnh bitmap .
Chế độ xem danh sách và Danh sách hình ảnh Điều khiển là một phần của Điều khiển chung của Windows và chúng tôi sẽ sử dụng chúng cùng với Điều khiển TreeView trong Microsoft Access.
Tôi nghĩ bạn muốn xem một số Hình ảnh Demo Điều khiển TreeView mẫu mà chúng tôi sẽ làm việc để xây dựng trong vài tuần tới.
B. Hình ảnh Demo Mẫu .
Các nút ở trạng thái Đã thu gọn.
- Hình ảnh TreeView Demo Mẫu với tất cả các Nút ở dạng Thu gọn.
Các nút trong Chế độ xem được mở rộng.
- Các nút điều khiển TreeView ở trên trong chế độ xem mở rộng.
Với Biểu tượng Hình ảnh Đầu mũi tên.
- Hiển thị Mẫu TreeView, với các Biểu tượng Hình ảnh đầu mũi tên được hiển thị ở bên trái của mỗi Văn bản nút.
Nút cấp gốc có các hình ảnh thư mục khác bằng Arrowhead.
- Tiếp theo, Hiển thị TreeView với dữ liệu được liên kết trong Biểu mẫu con. Các nút cấp độ gốc có hai Hình ảnh. Hình ảnh đã đóng thư mục được hiển thị ở chế độ bình thường. Khi Nút cấp độ gốc nhận được một Nhấp chuột, nó sẽ hiển thị hình ảnh Mở thư mục và hiển thị các Nút con ở dạng mở rộng.
Thông tin liên quan được hiển thị trên Biểu mẫu con dựa trên việc lựa chọn Nút cấp gốc.
Một trong các mục Nút con được chọn sẽ hiển thị một Biểu mẫu khác (thường được ẩn) với thông tin liên quan.
Điều khiển TreeView và ListView
- Trên Hình ảnh Biểu mẫu tiếp theo, có hai Bảng. Các nút liên quan đến danh mục sản phẩm nằm trong Điều khiển TreeView, trong Bảng điều khiển bên trái. Khi một trong các mục Danh mục nhận được Nhấp chuột vào điều khiển TreeView, các Mục Sản phẩm có liên quan với Số lượng và Giá niêm yết trong các Cột riêng biệt sẽ xuất hiện trong ListView Kiểm soát , trong Bảng điều khiển bên phải.
C. Tạo dữ liệu mẫu để chạy thử.
Hãy để chúng tôi dùng thử Điều khiển TreeView với một số dữ liệu mẫu được hiển thị bên dưới, dựa trên hai hình ảnh đầu tiên được hiển thị ở đầu Trang này.
Bảng dữ liệu mẫu ở trên có ba Trường.
-
ID là trường Tự động đánh số với Số ID duy nhất. Loại AutoNumber được chọn để thuận tiện cho chúng tôi. Trong cả hai trường hợp, Tất cả các bản ghi trong Bảng phải có Giá trị ID duy nhất. Nếu nó là Numeric thì nó phải được chuyển đổi thành String Type, trước khi thêm nó vào TreeView Control.
-
Trường thứ hai là Mô tả nút ( Mô tả ). Các hàng thông tin trên Cột này có liên quan với nhau về mặt logic.
-
ParentID thứ ba trường là Loại số. Nhưng chúng phải được chuyển đổi thành Loại chuỗi trước khi sử dụng nó trên Điều khiển TreeView.
Chúng ta phải biết các giá trị Cột mô tả có liên quan với nhau như thế nào, dựa vào đó chúng ta có thể thiết lập mối quan hệ bằng cách nhập các giá trị có liên quan vào ParentID trường.
Ví dụ:t he sắp xếp hợp lý mối quan hệ giữa Tác giả Sách, Nhà xuất bản Sách, Cửa hàng Sách nơi Sách được Bán, hoặc như Mối quan hệ giữa các thành viên của Cây gia đình.
Mối quan hệ giữa Danh mục sản phẩm, Sản phẩm, Cổ phiếu, Giá, v.v. Tất cả thông tin này có thể không xuất hiện dưới một Cột trong một Bảng. Chúng có thể xuất hiện trong các Cột khác nhau hoặc trong các bảng khác nhau.
ParentID trường rất quan trọng ở chỗ nó xác định sự sắp xếp thứ bậc của các nút. Nếu Trường ParentID trống thì bản ghi đó sẽ chuyển thành Nút cấp gốc. Nút con luôn phải có ParentID được điền bằng Giá trị ID bản ghi gốc của nó.
Node cấp gốc có thể có một hoặc nhiều Node con, Node con có thể có (các) Node con của chính nó.
Chúng tôi sẽ tải dữ liệu trên vào Điều khiển TreeView và xem nó trông như thế nào. Sau đó, chúng tôi sẽ điền vào ParentId trường có ID liên quan s để thay đổi chế độ xem, theo cách chúng ta muốn xem theo thứ tự hợp lý.
D. Tệp Thư viện Điều khiển Chung của Windows .
-
Tuy nhiên, điều đầu tiên, hãy mở một trong các Cơ sở dữ liệu của bạn hoặc tạo một cơ sở dữ liệu mới.
-
Mở Cửa sổ VBA ( ALT + F11 ) và chọn Tài liệu tham khảo… từ Công cụ Thực đơn.
-
Tìm kiếm Tệp: Điều khiển chung của Microsoft Windows trong danh sách tệp được hiển thị và đánh dấu chọn để chọn tệp đó.
Nếu bạn không thể tìm thấy tệp trong danh sách, hãy nhấp vào Duyệt qua ... Nút và tìm tệp:MSCOMLIB.OCX trong thư mục Hệ thống Windows, đối với Phiên bản Windows 7, hãy tìm tệp trong SysWOW64 thư mục. Nhấp vào OK để đóng Kiểm soát danh sách Tệp Thư viện.
-
Tạo một Bảng với cấu trúc sau:
-
Lưu Bảng với tên Mẫu .
-
Điền vào Bảng với dữ liệu mẫu của 12 bản ghi như được hiển thị trên chế độ xem dữ liệu Hình ảnh ở trên.
E. Tạo điều khiển TreeView trên biểu mẫu
-
Tạo một biểu mẫu trống mới.
-
Nhấp vào Điều khiển Activex từ nút Điều khiển Nhóm, tìm Điều khiển Microsoft TreeView sau đó chọn nó.
-
Nhấp vào OK để chèn điều khiển TreeView trên Biểu mẫu.
-
Kéo điều khiển xuống và sang phải để để lại một số khoảng trống ở trên cùng và bên trái của Điều khiển TreeView. Kéo núm điều khiển định kích thước ở góc dưới bên phải về phía góc phải và góc dưới cùng để làm cho điều khiển lớn hơn, như hình ảnh mẫu được cung cấp bên dưới.
-
Hiển thị Trang thuộc tính của điều khiển và thay đổi Tên của nó Giá trị thuộc tính đối với TreeView0, nếu nó khác ở đó.
-
Hiển thị Cửa sổ Chỉnh sửa VBA của Biểu mẫu.
- Sao chép và dán Mã VBA sau vào Mô-đun ghi đè lên các dòng mã hiện có ở đó:
Option Compare Database Option Explicit Dim tv As MSComctlLib.TreeView Const KeyPrfx As String = "X" Private Sub Form_Load() Dim db As Database Dim rst As Recordset Dim strSQL As String Dim nodKey As String Dim ParentKey As String Dim strText As String Set tv = Me.TreeView0.Object strSQL = "SELECT ID, Desc, ParentID FROM Sample;" Set db = CurrentDb Set rst = db.OpenRecordset(strSQL, dbOpenDynaset) Do While Not rst.EOF And Not rst.BOF If Nz(rst!ParentID, "") = "" Then nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the TreeView Root Level Nodes tv.Nodes.Add , , nodKey, strText Else ParentKey = KeyPrfx & CStr(rst!ParentID) nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the Record as Child Node tv.Nodes.Add ParentKey, tvwChild, nodKey, strText End If rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing End Sub
-
Lưu Biểu mẫu với tên frmSample, nhưng đừng đóng Cửa sổ VBA.
G. Mã VBA theo từng dòng.
F. Truy cập mã VBA.
Hãy để chúng tôi xem nhanh Mã VBA và hiểu chức năng của nó.
Trong Khu vực Khai báo Toàn cầu, của Mô-đun Biểu mẫu, Biến tv được khai báo là TreeView Vật. KeyPrfx được khai báo là Hằng số , với giá trị Loại chuỗi “X”.
Nút của TreeView Khóa-Giá trị của phải luôn thuộc Loại chuỗi và cần có ít nhất một ký tự không phải số trong Khóa nút. Các Giá trị Khoá Bảng mẫu của chúng tôi đều ở dạng số, chúng tôi có thể chuyển đổi và thêm chúng vào Giá trị không đổi “ X ”. Chỉ riêng Giá trị số được chuyển đổi thành Loại chuỗi sẽ không được chấp nhận là Node-Key.
Lưu ý: Nếu Node-Key và Parent-Key các giá trị đã ở dạng Alpha hoặc Alpha-Numeric thì câu hỏi về chuyển đổi sẽ không nảy sinh. Tất cả các giá trị Node-Key phải là Duy nhất.
Trong Form_Load () Thủ tục sự kiện, các đối tượng Cơ sở dữ liệu và Tập bản ghi được khai báo. Bốn biến chuỗi cũng được khai báo.
Câu lệnh Set tv =Me.TreeView0.Object câu lệnh gán, TreeView0 Đối tượng trên Biểu mẫu, thành biến đối tượng tv.
Câu lệnh OpenRecordset () mở ra Mẫu Bản ghi bảng sử dụng SQL strSQL.
Làm trong khi… câu lệnh đảm bảo rằng tập bản ghi không trống, nếu trống thì thoát khỏi Vòng lặp và kết thúc Chương trình.
Nếu có bản ghi thì bản ghi đầu tiên là ParentId trường được kiểm tra xem có sự hiện diện của một số giá trị trong đó hay không.
Nếu nó trống thì bản ghi đó dành cho Nút cấp gốc của điều khiển TreeView mục. Nút cấp độ gốc chỉ cần Node-Key duy nhất Giá trị mà chúng tôi đã có trong ID Trường và Mục Mô tả Giá trị trường cho Văn bản Lập luận.
Nếu ParentID trường có một số giá trị thì bản ghi là Nút con (Con của Nút cấp gốc hoặc con của một số Nút con cấp trên) của Đối tượng TreeView.
Dòng tiếp theo tạo Khóa Giá trị đối số trong gật đầu Biến chuỗi, với ID Trường Giá trị, được chuyển đổi thành Chuỗi và được thêm vào tiền tố hằng số X, Node-Key trở thành X1 .
Đầu tiên! Mô tả giá trị trường được thêm vào Biến chuỗi strText, đơn giản là để rõ ràng và ngắn gọn trong Nodes.Add () danh sách tham số của method, nếu tham chiếu trường rất dài thì điều này sẽ giữ cho phương thức Add () gọn gàng và ngăn nắp.
Dòng thực thi tiếp theo: tv.Node.Add () gọi phương thức Add () của TreeView.Nodes Đối tượng để thêm nút vào TreeView0 kiểm soát trên Biểu mẫu frmSample .
Cú pháp của phương thức Add () được đưa ra dưới đây để tham khảo:
tv.Nodes.Add([Relative],[Relationship],[Key],[Text],[Image],[SelectedImage]) As Node
Tất cả sáu Tham số của Thêm () phương pháp là tùy chọn. Nếu bạn gọi phương thức này mà không có bất kỳ tham số nào thì Nút cấp gốc trống sẽ được thêm vào và một dòng cây trống sẽ xuất hiện như một chỉ báo trong điều khiển TreeView.
Đối với TreeView Gốc Cấp độ Nút yêu cầu Chìa khóa và Văn bản Giá trị đối số.
Đối với các Nút con, cả [Tương đối] và [Mối quan hệ] Lập luận là bắt buộc. Việc bỏ qua bất kỳ nút nào trong số chúng sẽ chèn Nút làm Nút gốc, nhưng sẽ không tạo ra bất kỳ lỗi nào.
[Tương đối] là NodKey của một Node hiện có, được nhập vào ParentID của bản ghi liên quan đồng ruộng. [Mối quan hệ] là tvwChild Constant với giá trị số 4, xác định nó là Nút con của Khóa- Giá trị trong ParentID Trường.
Hằng số khác các giá trị cho Đối số mối quan hệ được sử dụng để định vị các Nút con ở một vị trí cụ thể. Giá trị Không đổi như sau:
tvwFirst =0, đặt nó là Nút đầu tiên, ở cấp của Nút tương đối.
tvwLast =1, đặt là Nút cuối cùng, ở cấp của Nút tương đối.
tvwNext =2, đặt Node sau một Node được chỉ định.
tvwPre trước =3, đặt Node ngay trước Node được chỉ định.
Lưu ý: Bạn có thể thử nghiệm bằng cách đặt từng Giá trị trong Mối quan hệ Đối số và chạy mã trong chế độ gỡ lỗi, sau khi giữ Cửa sổ và biểu mẫu VBA ở dạng xem bình thường cạnh nhau. Xem cách các nút được sắp xếp trong mỗi chu kỳ thực thi mã để hiểu.
Những điều này sẽ hữu ích trong khi chỉnh sửa Điều khiển TreeView bằng cách Xóa một Mục và chèn một mục khác vào vị trí của nó hoặc thêm một Nút mới tại một vị trí cụ thể.
Nút có Khóa [Tương đối] phải tồn tại trong Bộ sưu tập nút trước khi cố gắng thêm Nút con vào Nút đó, nếu không phương thức Add () sẽ tạo ra lỗi.
Quá trình này được lặp lại cho đến khi tất cả các bản ghi được xử lý trong tập bản ghi.
Lưu ý: Bạn có thể xem lại Mã VBA sau khi Chạy Demo.
H. Lần chạy thử đầu tiên.
Mở Biểu mẫu ở Dạng xem Bình thường. Kết quả Chạy thử sẽ giống như Hình ảnh bên dưới.
Nó trông không hơn một Hộp danh sách bình thường. Hãy nhớ rằng chúng tôi chưa điền bất kỳ giá trị nào vào ParentID trong Mẫu của chúng tôi Bàn. Chúng ta phải thiết lập một số mối quan hệ giữa các Mục trong các hàng Bản ghi để di chuyển và định vị chúng theo thứ tự phân cấp trong Điều khiển TreeView.
Tôi. Hiểu mối quan hệ giữa các bản ghi.
- Mở Bảng Mẫu và hãy để chúng tôi xem xét các Hồ sơ và mối quan hệ của chúng với nhau như thế nào.
- Hãy để chúng tôi rời khỏi Cơ sở dữ liệu một mình vật phẩm như một Vật phẩm gốc.
Đối tượng Cơ sở dữ liệu cũng có một số đối tượng cấp cao nhất: Ứng dụng, DBEngine, Bộ sưu tập không gian làm việc và Bộ sưu tập cơ sở dữ liệu , mà chúng tôi đã bỏ qua ở đây.
- Sau đó, chúng tôi có Bảng nhóm Mặt hàng với ID giá trị 2.
- Bảng tiếp theo , Trường, Trường các mục có liên quan đến Bảng tập đoàn. Chúng tôi muốn Bảng, Trường, và Trường các mục để xếp hàng trong Mục chính Bảng Bản ghi nhóm có giá trị ID 2.
- Hãy để chúng tôi gọi bản ghi là Bảng với tư cách là Parent Node Bản ghi, Bảng, Trường và Trường dưới dạng Nút con .
J. Cập nhật Trường ParentID.
- Vì vậy, chúng tôi cần cập nhật giá trị 2 (Node-Key của Bảng ) trong p arentID trường của Bảng , Trường, và Trường Hồ sơ.
- Vui lòng chỉ cập nhật những bản ghi đó và đóng Bảng. Khi hoàn tất, các bản ghi sẽ giống như Hình ảnh dưới đây:
-
Bây giờ, hãy mở frmSample của bạn trong Dạng xem Biểu mẫu và kiểm tra Điều khiển TreeView. Kết quả sẽ giống như kết quả trước đó mà không có bất kỳ thay đổi nào. Các thay đổi đã xảy ra nhưng nó không hiển thị với bạn.
K. Trang thuộc tính của Điều khiển TreeView.
- Xoay frmSample trong Chế độ xem thiết kế.
- Nhấp chuột phải vào Điều khiển TreeView và TreeCtrl_Object ánh sáng cao từ Trình đơn phím tắt và chọn Thuộc tính .
Bảng Thuộc tính sẽ giống như Hình ảnh dưới đây:
- Thay đổi LineStyle Thuộc tính Giá trị =1 (tvwRootLines) và Nhấp vào Áp dụng sau đó nhấp vào OK để đóng Trang thuộc tính.
L. Chạy theo LineStyle Thay đổi giá trị tài sản
- Lưu Biểu mẫu và mở ở Dạng xem Thường. Bây giờ, các Dòng cây đang xuất hiện chính xác. Bảng Nút có một điểm cộng ( + ) ở bên trái, cho biết rằng Nút này có một hoặc nhiều Nút con ở cấp độ tiếp theo và chúng không ở dạng mở rộng.
- Nhấp vào biểu tượng dấu cộng để mở rộng Nút và hiển thị các Nút con, có cùng ParentID. Khi bạn nhấp vào Biểu tượng Trừ, các Nút Con sẽ bị thu gọn và ẩn đi, thay đổi lại biểu tượng thành dấu cộng.
- Màn hình sẽ giống như Hình ảnh sau đây khi được mở rộng:
M. ParentID Cập nhật các bản ghi khác.
Chúng tôi sẽ cập nhật Biểu mẫu ghi lại ID Giá trị (Node-Key Value) thành Biểu mẫu, Điều khiển, và Kiểm soát bản ghi ParentID để các bản ghi này sẽ liệt kê trong Biểu mẫu Nút là Nút con của nó .
Tương tự, cập nhật trường ParentID của Báo cáo và Kiểm soát hồ sơ có Báo cáo ID (Node-Key Value) Giá trị sao cho Báo cáo và Kiểm soát các mục sẽ định vị trong Báo cáo ở Nút mẹ , vì nó là Nút con .
-
Thực hiện các thay đổi đối với các bản ghi bảng Mẫu của bạn với các giá trị ParentID như được hiển thị bên dưới:
Sau những thay đổi ở trên, Màn hình TreeView sẽ giống như Hình ảnh sau đây, khi tất cả các Nút ở dạng mở rộng.
Tất cả các Nút con liên quan đến Nút cấp gốc:Bảng, Biểu mẫu và Báo cáo được nhóm lại thành một danh sách dưới Nút mẹ của chúng. Nhưng một nút con có thể có một nút cha, nút cha mẹ hoặc một nút cha mẹ lớn.
N. Sắp xếp Tất cả Đối tượng theo Thứ tự Phân cấp Hợp lý.
Ví dụ:chúng ta hãy lấy Node cấp độ gốc đầu tiên Bảng . Hợp lý Trường (với ID bản ghi 5) có liên quan trực tiếp đến Trường bộ sưu tập (ID bản ghi 4), Trường bộ sưu tập liên quan đến Bảng và Bảng là một phần của Bàn thu thập. Mỗi mục trong nhóm (bản ghi số 5 đến 2) có liên quan đến một bước lên cấp độ tiếp theo.
Vì vậy, hãy để chúng tôi định vị chính xác các Nút con này dưới Nút mẹ của chính chúng và xem nó trông như thế nào.
-
Mở Bảng mẫu của bạn và thay đổi các giá trị ParentID của Bảng liên quan đến Hồ sơ con như được hiển thị bên dưới:
- Trường với Gốc của bản ghi ID-5 là Trường, bản ghi có ID-4, do đó chúng tôi đã cập nhật trường ParentID của bản ghi thứ 5 với ID số 4.
- Tương tự, trường ParentID của bản ghi thứ 4 được cập nhật với 3 và ParentID của bản ghi thứ 3 được cập nhật với bản ghi số 2.
-
Lưu ý: Đừng cho rằng các mục được sắp xếp theo cách này phải ở cạnh nhau.
- Sau khi thay đổi các bản ghi, hãy lưu Bảng và Mở frmSample để xem các thay đổi. Màn hình TreeView của bạn sẽ giống như hình dưới đây, với tất cả các Nút ở dạng mở rộng.
Điều khiển TreeView có Trang thuộc tính riêng và các cài đặt ảnh hưởng đến sự xuất hiện của nó. Vì vậy, chúng tôi sẽ thực hiện thay đổi một trong các Thuộc tính của nó và quay lại xem TreeView một lần nữa.
Cài đặt trên Trang thuộc tính này thay đổi giao diện của Màn hình TreeView.
Thuộc tính trên cùng bên trái Kiểu đã được thiết lập với các tính năng tối đa có sẵn Tùy chọn- 7 (tvwTreeLinesPlusMinusPictureText).
Nút con của Nút cấp độ gốc có thể là Nút mẹ đối với Nút con hoặc Con của chính nó. Bằng cách này, nó có thể đi vài bước xuống cây.
Thay đổi hai nhóm khác trong ParentID của Nút con các giá trị trường trông giống như Hình ảnh được đưa ra ở trên.
ĐỐI TƯỢNG TỪ ĐIỂN
- Khái niệm cơ bản về đối tượng từ điển
- Khái niệm cơ bản về đối tượng từ điển-2
- Sắp xếp các Mục và Khoá Đối tượng Từ điển
- Hiển thị Bản ghi từ Từ điển
- Thêm các đối tượng lớp dưới dạng các mục từ điển
- Cập nhật Mục Từ điển Đối tượng Lớp