Giới thiệu.
Trong tập này của Hướng dẫn điều khiển chế độ xem dạng cây, chúng ta sẽ tìm hiểu cách Thêm / Xóa Điểm giao. Vị trí của mục ứng viên Thêm / Xóa sẽ được đánh dấu chọn, nơi chúng tôi muốn Thêm () Nút mới hoặc để Xóa () Nút được đánh dấu. Việc bổ sung Nút có thể ở cùng cấp với Nút được đánh dấu hoặc là Nút con.
Các phiên hướng dẫn điều khiển TreeView cho đến nay.
- Hướng dẫn Điều khiển Microsoft TreeView
- Tạo Menu Truy cập với Điều khiển TreeView
- Gán hình ảnh cho điều khiển TreeView
- Gán hình ảnh cho TreeView Control-2
Chế độ xem Bình thường của Điều khiển Chế độ xem Cây Demo trên Biểu mẫu MS-Access, với các điều khiển khác, được đưa ra bên dưới.
Bảng Dữ liệu cho Bản trình diễn của Điều khiển TreeView.
Bảng có tên Mẫu chúng tôi đã sử dụng trong Phiên hướng dẫn đầu tiên, chúng tôi cũng sẽ sử dụng ở đây. Đây là một bảng nhỏ chứa các bản ghi của Cơ sở dữ liệu Access, cấu trúc điều khiển bảng, Biểu mẫu và Báo cáo, được sắp xếp theo thứ tự phân cấp và dễ hiểu.
ID cột (Chế độ xem dạng cây Chìa khóa ) là trường Số tự động.
Khách truy cập mới Được cập nhật cho Phiên hướng dẫn này.
Nếu bạn chưa trải qua Phiên hướng dẫn đầu tiên thì bạn có thể tải xuống Cơ sở dữ liệu Demo từ Trang phiên thứ hai:Tạo Menu Access với Điều khiển Chế độ xem dạng cây. Có một Bảng trong Cơ sở dữ liệu đó với tên: Mẫu và Biểu mẫu frmSample . Bạn có thể Nhập chúng vào cơ sở dữ liệu hiện tại của mình. Có một biểu mẫu khác có tên frmMenu ở đó và bạn có thể Sao chép các nút lệnh Mở rộng tất cả, Thu gọn tất cả, và các Thủ tục Sự kiện Nhấp vào Nút Lệnh của họ từ frmMenu vào frmSample Mô-đun mã để tiếp tục với phiên này.
Như tôi đã đề cập trước đó, chúng ta có thể chia sẻ ImageList Control, với các Hình ảnh được tải lên các Dự án khác, chúng tôi sẽ tạo một bản sao của ImageList Control của Phiên hướng dẫn cuối cùng và mang nó đến đây, cùng với tất cả các hình ảnh đã tải lên và sử dụng nó trên Các nút điều khiển chế độ xem dạng cây trên frmSample .
Nhập Kiểm soát Danh sách Hình ảnh với Hình ảnh.
Bạn có thể đưa vào ImageList Control mà bạn đã có, với các Hình ảnh đã tải lên trong cơ sở dữ liệu khác, theo những cách sau:
-
Nhập Biểu mẫu có Điều khiển Danh sách Hình ảnh vào cơ sở dữ liệu đang hoạt động, từ Cơ sở dữ liệu nơi bạn có Điều khiển Danh sách Hình ảnh với Hình ảnh được tải lên theo cách thủ công. Sao chép và dán Điều khiển danh sách hình ảnh vào Biểu mẫu, nơi bạn muốn.
-
Hoặc, Sao chép Điều khiển Danh sách Hình ảnh vào Bảng tạm, từ Cơ sở dữ liệu, nơi bạn có, trước tiên. Nếu bạn đã tải xuống Cơ sở dữ liệu demo từ Phiên hướng dẫn trước đó thì bạn đã có Kiểm soát danh sách hình ảnh với các hình ảnh được tải lên. Đóng Cơ sở dữ liệu sau khi sao chép điều khiển ImageList vào Clipboard.
-
Mở cơ sở dữ liệu đích và mở Biểu mẫu mà bạn muốn Điều khiển Danh sách Hình ảnh và Dán nó vào Biểu mẫu.
Với các dòng mã sau trong CreateTreeView () Quy trình con bạn có thể chuyển Tham chiếu đối tượng ImageList đến Điều khiển Chế độ xem dạng cây.
Dim tv As MSComctlLib.TreeViewDim ImgList As MSComctlLib.ImageListSet tv = Me.TreeView0 .Objecttv.Nodes.ClearSet ImgList = Tôi.ImageList0 .Objecttv.ImageList =ImgList
Thay đổi Tên đối tượng được đánh dấu trong Mã, nếu chúng khác nhau trên Biểu mẫu.
Sau đó, bạn có thể thêm Tên khóa hình ảnh vào TreeView Nodes.Add () hai tham số cuối cùng của phương thức.
Những bài tập này chúng tôi đã thực hiện trong các phần trước. Để nhắc nhở bạn, chúng tôi đang sử dụng Bảng và Điều khiển Chế độ xem dạng cây mà chúng tôi đã tạo trong Phiên hướng dẫn đầu tiên và được triển khai với các thay đổi được giải thích ở trên.
Hiển thị Giá trị Thuộc tính Nút được Đánh dấu Kiểm tra.
Nút Chìa khóa đã chọn , Khóa chính, và Văn bản Các thuộc tính được hiển thị trong TextBox ở phía bên phải của Điều khiển Chế độ xem dạng cây. Hộp kiểm với Chú thích: Nút con, Xóa Nút, và Thêm nút Các nút lệnh là những bổ sung mới cho Biểu mẫu. Chức năng của chúng sẽ được giải thích trong thời gian ngắn.
Hiển thị các Hộp kiểm trên Điều khiển TreeView.
Thông thường, Hộp kiểm không được hiển thị trên Điều khiển TreeView, trừ khi chúng tôi bật Thuộc tính trong Trang thuộc tính của Điều khiển Chế độ xem Cây. Nó chỉ có một số chức năng hạn chế ở đây. Bất cứ điều gì chúng ta sẽ làm ở đây cũng có thể được thực hiện mà không cần hộp kiểm.
Một cách tiếp cận tốt hơn để sử dụng CheckBox có thể là việc chuẩn bị Báo cáo về các vị trí chi nhánh đã chọn của các Doanh nghiệp của Công ty, dựa trên các lựa chọn ngẫu nhiên có thể lựa chọn của người dùng về các chi nhánh, từ Access Project Menu.
Ở đây, mục đích là nâng cao nhận thức về tính năng này và chạy bản demo về cách sử dụng của nó.
- Mở Biểu mẫu bằng Điều khiển TreeView trong Chế độ xem Thiết kế.
- Nhấp chuột phải vào Điều khiển TreeView, đánh dấu Đối tượng TreeCtrl , chọn Thuộc tính để hiển thị Trang thuộc tính.
- Đặt Dấu kiểm trên Hộp kiểm trên Điều khiển Thuộc tính như được hiển thị trong Hình ảnh bên dưới.
Hình ảnh Demo TreeView được đưa ra ở trên cùng, Chi tiết.
Hãy để chúng tôi xem những gì chúng tôi có trên Biểu mẫu trình diễn frmSample được trình bày trên đầu trang này. Điều khiển Chế độ xem dạng cây và hai Nút lệnh trên cùng, Mở rộng tất cả và Thu gọn tất cả, trên Nhấp vào Mở rộng hoặc Thu gọn các nút và chúng ta đã thấy các chức năng của chúng trong tập trước.
Ở phía bên phải có ba Hộp văn bản, bên dưới nhãn tiêu đề: Giá trị thuộc tính , để hiển thị Chìa khóa của nút được đánh dấu chọn , ParentKey, và Văn bản Giá trị.
Xóa nút Nút lệnh xóa Nút được đánh dấu chọn hoặc Nút và các Nút con của nó.
Trước khi chọn Nút lệnh thêm nút , Văn bản Giá trị Thuộc tính phải được chỉnh sửa để thay thế bằng Giá trị Văn bản mới cho Nút mới.
Phía trên Thêm nút Nút lệnh, có một Hộp kiểm với nhãn Nút con. Thêm nút và Nút con Hộp kiểm làm việc cùng nhau để đặt Quy tắc, vị trí mà Nút mới sẽ xuất hiện.
Hiểu Hành động Thêm nút.
Giả sử rằng bạn muốn thêm một Node mới cho Siêu kết nối trong Trường danh sách kiểu dữ liệu nhóm (hoặc Nút mẹ). Nhìn vào Hình ảnh Demo được cung cấp trên đầu trang này, nơi tôi đã đánh dấu chọn vào Trường Ngày Node, trong số các Nút con khác. Các trang Thuộc tính bên phải hiển thị Khóa của nó: X15 , ParentKey: X4 &Văn bản: Trường ngày Mô tả.
Thay đổi Văn bản: Trường Ngày tới Siêu liên kết trên Hộp văn bản hiển thị Thuộc tính và Nhấp vào Thêm nút Nút lệnh. Đầu ra sẽ như hình dưới đây:
Nếu bạn Chọn-Đánh dấu vào Trường Mục nút cha và đánh dấu kiểm vào Nút con , phía trên Thêm nút Nút lệnh, bạn sẽ nhận được kết quả tương tự.
Thay vào đó, nếu bạn giữ dấu kiểm Node trên Trường ngày và đặt dấu kiểm trên Nút trẻ em trên tùy chọn Thêm nút Nút Command, bạn sẽ nhận được kết quả như hình bên dưới.
Nút Con sẽ được tạo trong Nút Đánh dấu Kiểm tra.
Các hành động Add Node trước tiên cần tạo một bản ghi mới trong bảng bên dưới.
Bản ghi mới được tạo trong Mẫu Bảng, với Văn bản mới: HyperLink và ParentID Các giá trị. Trường AutoNumber tạo một Số mới và chúng tôi truy xuất nó và sử dụng nó làm Khóa-Giá trị cho Nút.
Mã VBA quy trình phụ Thêm nút được cung cấp bên dưới:
Private Sub cmdAdd_Click () Dim strKey As StringDim lngKey As LongDim strParentKey As StringDim lngParentkey As LongDim strText As StringDim lngID As LongDim strIDKey As StringDim childflag As IntegerDim dim db As LongDim strText As As Integeri =0For Each tmpnode In tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True i =i + 1 End IfNextIf i> 1 Then MsgBox "Các nút đã chọn:" &i &vbCr &"Chỉ chọn một nút để đánh dấu Bổ sung . ", vbCritical," cmdAdd () "Thoát SubEnd If'Read Các giá trị thuộc tính từ FormstrKey =Trim (Me! [TxtKey]) lngKey =Val (Mid (strKey, 2)) strParentKey =Trim (Me! [TxtParent]) lngParentkey =IIf (Len (strParentKey)> 0, Val (Mid (strParentKey, 2)), 0) strText =Trim (Me! [Text]) 'Read child Node Option settingchildflag =Nz (Me.ChkChild.Value, 0) intflag =0strSql ="INSERT INTO Sample ([Desc], [ParentID])" Nếu lngParentkey =0 And childflag =0 Then 'Add Root-level Node, ParentKey i s Blank strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &"" strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =1ElseIf (lngParentkey> =0) And (childflag =True) Sau đó 'Chèn một Nút con vào Nút được đánh dấu kiểm, tại đây Giá trị khóa được sử dụng làm ParentKey strSql =strSql &"SELECT'" &strText &"'AS [Desc ], '"&lngKey strSql =strSql &"' NHƯ ParentID TỪ Mẫu TẠI ĐÂU ((Sample.ID =1)); " intflag =2ElseIf (lngParentkey> =0) And (childflag =False) Sau đó 'Chèn nút ở mức được đánh dấu kiểm, Thêm mục dưới cùng một ParentKey strSql =strSql &"SELECT'" &strText &"'AS [Desc], '"&lngParentkey strSql =strSql &"' NHƯ ParentID TỪ Mẫu TẠI ĐÂU ((Sample.ID =1)); " intflag =3End IfSet db =CurrentDbdb. Level Node, ParentKey là Blank tv.Nodes.Add,, strIDKey, strText, "folder_close", "folder_open" Trường hợp 2 'Chèn một Node con vào Node được đánh dấu kiểm, tại đây Giá trị khóa được sử dụng làm ParentKey tv.Nodes.Add strKey , tvwChild, strIDKey, strText, "left_arrow", "right_arrow" Trường hợp 3 'Chèn nút ở mức được đánh dấu kiểm, Thêm mục dưới cùng một ParentKey tv.Nodes. Thêm strParentKey, tvwChild, strIDKey, strText, "left_arrow", " right_arrow "End Selecttv.Refresh 'Xóa các giá trị thuộc tính khỏi Form With Me .TxtKey =" ".TxtParent =" ".Text =" "End WithSet db =NothingcmdExpand_Click cmdAdd_Click_Exit:Thoát SubIdxOutofBound:CreateTreeViewResume cmdAdd_ClickHãy để chúng tôi kiểm tra mã VBA. Sau khi Khai báo biến cục bộ, các Nút TreeView được quét để tìm dấu kiểm và có Tổng số các mục được đánh dấu. Nếu các Nút được đánh dấu chọn có nhiều hơn một thì nó sẽ hiển thị một thông báo và hủy bỏ Chương trình.
Lưu ý: Thay vì Đánh dấu bằng Kiểm tra, chúng ta có thể Nhấp trực tiếp vào Nút để chọn. Trong cả hai trường hợp, Nút đã kiểm tra / Đã nhấp được chuyển làm tham số cho Thủ tục Sự kiện,. Đánh dấu kiểm là tốt khi bạn cần chọn nhiều hơn một mục từ Trình đơn dự án, ví dụ:để chọn một tập hợp Dữ liệu khác cho một báo cáo cụ thể, v.v.
Giá trị thuộc tính của nút đã kiểm tra được đọc từ các điều khiển Biểu mẫu thành strKey , strParentKey, và strText. Giá trị số ID, ParentID được trích xuất và lưu trong lngKey và lngParentKey Các biến để sử dụng trong chuỗi SQL.
Tiếp theo, Nút trẻ em Giá trị Hộp kiểm được lưu trong ChildFlag Biến đổi.
Ba bộ Chuỗi SQL khác nhau được tạo dựa trên Nút và Nút con đã chọn Tùy chọn Hộp kiểm phía trên Nút lệnh Thêm Node.
- Nếu ParentID Giá trị thuộc tính trên Biểu mẫu trống và Nút con hộp kiểm không được chọn thì Bản ghi mới ở cấp độ gốc sẽ được tạo vì người dùng đã kiểm tra đã đánh dấu nút cấp độ gốc.
- Nếu ParentID Giá trị thuộc tính > =0 và Nút con hộp kiểm được chọn ( đã chọn ) sau đó một bản ghi mới được tạo dưới dạng Nút con đến Nút được đánh dấu kiểm tra. Chìa khóa của nút được đánh dấu chọn (ID) được sử dụng làm ParentID trên Bản ghi mới cho Nút mới.
- Nếu ParentID Giá trị > =0 và Nút con tùy chọn hộp kiểm không được chọn ( không được chọn ) thì Bản ghi mới được tạo cho Nút mới, ở cùng cấp với Nút được đánh dấu chọn.
intFlag Biến được đặt với một trong ba giá trị:1,2 hoặc 3, tùy thuộc vào việc thực thi SQL, như một chỉ báo cho loại Node để tạo trên Điều khiển dạng xem cây.
Tiếp theo, dựa trên việc lựa chọn các tùy chọn, SQL được thực thi để tạo Bản ghi Mới trên Mẫu Bảng, với Giá trị trường ID đánh số tự động mới.
Tiếp theo, DMax () Hàm trả về ID Bản ghi duy nhất dưới dạng Khóa-Giá trị cho Nút mới.
Dựa trên tùy chọn loại Node (1,2 hoặc 3), Node được tạo trên Tree View Control.
Nội dung Hộp văn bản hiển thị Thuộc tính bị xóa.
Xóa nút hoặc nút có trẻ em.
Nút xóa Tùy chọn dễ dàng hơn nhiều so với bài tập trước đó. Đơn giản chỉ cần xóa nút đã đánh dấu kiểm và nút con của nó, nếu có, khỏi Điều khiển dạng cây. Các bản ghi liên quan cũng bị xóa khỏi Bảng.
Mã VBA để loại bỏ nút được cung cấp bên dưới:
Private Sub cmdDelete_Click () Dim subsId As Long, gật gù As LongDim strSql As StringDim db As DAO.DatabaseDim j As IntegerDim tmpnode As MSComctlLib.NodeDim strKey As StringDim strMsg As Stringj =0 'Nhận trong số lượng nút được đánh dấu kiểm tra tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True strKey =tmpnode.Key j =j + 1 End IfNext If j> 1 Then MsgBox "Các nút đã chọn:" &j &vbCr &"Chỉ chọn một nút để xóa." , vbCritical, "cmdDelete ()" Thoát Sub End IfSet tmpnode =tv.Nodes.Item (strKey) tmpnode.Selected =TrueSet db =CurrentDb'kiểm tra số lượng đầu của (các) Nút con của NodeIf tmpnode.Children> 0 Sau đó ' Cảnh báo:'Xóa các nút ngẫu nhiên sẽ để lại các nút mồ côi' trong Bảng và dẫn đến lỗi, trong quá trình tải Chế độ xem cây tiếp theo strMsg ="Nút đã đánh dấu có" &tmpnode.Children &"Children." &VbCr &"Xóa Nút con cũng vậy? " If MsgBox (strMsg, vbYesNo + vbCritical, "cmdDelete ()") =vbYes Then 'Kiểm tra kỹ và nhận xác nhận. strMsg ="Chỉ xóa tập hợp các Nút con sâu nhất" &vbCr strMsg =strMsg &"và Nút mẹ của chúng cùng một lúc." &vbCr &vbCr strMsg =strMsg &"Bạn có chắc chắn Tiếp tục ..?" If MsgBox (strMsg, vbYesNo + vbCritical, "cmdDelete ()") =vbYes Then Do Until tmpnode.Children =0 gật đầu =Val (Mid (tmpnode.Child.Key, 2)) 'Xóa nút con tv.Nodes.Remove tmpnode .Child.Index 'Xóa bản ghi liên quan strSql ="XÓA Mẫu. *, Sample.ID TỪ Mẫu WHERE (((Sample.ID) =" &gật đầu &"));" db.Execute strSql Loop Else Exit Sub End If Else Exit Sub End IfEnd If gậtId =Val (Mid (tmpnode.Key, 2)) 'Delete Parent tv.Nodes.Remove tmpnode.Key tv.Refresh' Delete Marked Record strSql =" XÓA Mẫu. *, Sample.ID TỪ Mẫu WHERE (((Sample.ID) ="&gật đầu &")); " db.Execute strSql 'Xóa các giá trị thuộc tính khỏi Form With Me .TxtKey ="" .TxtParent ="" .Text ="" End With Set db =Nothing End SubSau Khai báo biến cục bộ, Cho từng. . . Tiếp theo Vòng lặp có một số lượng các nút có dấu kiểm. Nếu có nhiều hơn một mục được đánh dấu kiểm được tìm thấy thì một thông báo sẽ hiển thị và chương trình sẽ bị hủy bỏ.
Nếu chỉ có một mục được đánh dấu chọn thì bước thứ hai Kiểm tra xác thực sẽ tìm kiếm sự hiện diện của (các) Nút con của Nút đã chọn. Nếu các nút con được tìm thấy, thì một thông báo sẽ hiển thị trên hiệu ứng đó. Người dùng cần xác nhận lại ý định của mình để tiến hành xóa các Nút con trước rồi sau đó đến Nút mẹ được đánh dấu chọn.
Lưu ý: Người dùng nên xóa cấp độ sâu nhất của (các) Nút con trước tiên hoặc tất cả các Nút con cấp sâu nhất với Nút mẹ trực tiếp của họ, bằng cách chỉ đánh dấu Nút mẹ, không đánh dấu Nút mẹ. Giới hạn quy tắc xóa ở cấp độ này sẽ giữ cho Mã đơn giản và dễ hiểu. Vi phạm quy tắc này có thể khiến một số Nút bị mất tích và dẫn đến lỗi khi Chế độ xem dạng cây mở ra lần sau .
Các Nút con bị xóa lần lượt và các bản ghi tương ứng trên bảng cũng bị xóa lần lượt. Sau đó xóa Bản ghi cha đã được đánh dấu.
Nếu Node được đánh dấu không có (các) Node con thì nó sẽ bị xóa ngay sau khi kiểm tra xác thực và bản ghi bảng tương ứng cũng bị xóa.
Nội dung Hộp văn bản hiển thị Thuộc tính trên biểu mẫu bị xóa.
Mã VBA mô-đun lớp hoàn chỉnh của Biểu mẫu frmSample.
Sau đây là Mã VBA đầy đủ trong frmSample Mô-đun lớp của, với các quy trình phụ nhỏ khác để mở rộng các Nút thu gọn, TreeView0_NodeCheck Quy trình sự kiện, cmdExit Sự kiện nhấp vào nút lệnh, Form_Load () Thủ tục và CreateTreeView () Chương trình con:
Option Compare DatabaseOption ExplicitDim tv As MSComctlLib.TreeViewDim ImgList As MSComctlLib.ImageListConst KeyPrfx As String ="X" Private Sub cmdAdd_Click () Dim strKeyarent As StringDim lngKey As LongDim strParentKey As StringKey As LongDim strParentKey LongID StringDim childflag As IntegerDim db As DAO.DatabaseDim strSql As StringDim intflag As IntegerDim tmpnode As MSComctlLib.NodeDim i As Integeri =0 For Each tmpnode In tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True iN =i + 1 End If iN =iextIf End If 1 Sau đó MsgBox "Các nút đã chọn:" &i &vbCr &"Chỉ chọn một nút để đánh dấu Bổ sung.", VbCritical, "cmdAdd ()" Thoát SubEnd If'Read Các giá trị thuộc tính từ FormstrKey =Trim (Tôi! [TxtKey]) lngKey =Val (Mid (strKey, 2)) strParentKey =Trim (Me! [TxtParent]) lngParentkey =IIf (Len (strParentKey)> 0, Val (Mid (strParentKey, 2)), 0) strText =Trim (Me! [ Văn bản]) 'Đọc thiết lập tùy chọn nút conldflag =Nz (Me.ChkChild.Value, 0) intflag =0strSql ="INSERT INTO Sample ([Desc], [ParentID])" If lngParentkey =0 And childflag =0 Then 'Add Root-level Node, ParentKey is Blank strSql =strSql &"SELECT'" &strText &"'AS [ Desc], '"&" "strSql =strSql &" "AS ParentID TỪ Sample WHERE ((Sample.ID =1));" intflag =1ElseIf (lngParentkey> =0) And (childflag =True) Sau đó 'Chèn một Nút con vào Nút được đánh dấu kiểm, tại đây Giá trị khóa được sử dụng làm ParentKey strSql =strSql &"SELECT'" &strText &"'AS [Desc ], '"&lngKey strSql =strSql &"' NHƯ ParentID TỪ Mẫu TẠI ĐÂU ((Sample.ID =1)); " intflag =2ElseIf (lngParentkey> =0) And (childflag =False) Sau đó 'Chèn nút ở mức được đánh dấu kiểm, Thêm mục dưới cùng một ParentKey strSql =strSql &"SELECT'" &strText &"'AS [Desc], '"&lngParentkey strSql =strSql &"' NHƯ ParentID TỪ Mẫu TẠI ĐÂU ((Sample.ID =1)); " intflag =3End IfSet db =CurrentDbdb. Level Node, ParentKey là Blank tv.Nodes.Add,, strIDKey, strText, "folder_close", "folder_open" Trường hợp 2 'Chèn một Node con vào Node được đánh dấu kiểm, tại đây Giá trị khóa được sử dụng làm ParentKey tv.Nodes.Add strKey , tvwChild, strIDKey, strText, "left_arrow", "right_arrow" Trường hợp 3 'Chèn nút ở mức được đánh dấu kiểm, Thêm mục dưới cùng một ParentKey tv.Nodes. Thêm strParentKey, tvwChild, strIDKey, strText, "left_arrow", " right_arrow "End Selecttv.Refresh 'Xóa các giá trị thuộc tính khỏi Form With Me .TxtKey =" ".TxtParent =" ".Text =" "End WithSet db =NothingcmdExpand_Click cmdAdd_Click_Exit:Thoát SubIdxOutofBound:CreateTreeViewResume cmdAdd Click () DoCmd.CloseEnd SubPrivate Sub cmdDelete_Click () Dim nodeId As Long, gật gù As LongDim strSql As StringDim db As DAO.DatabaseDim j As IntegerDim tmpnode As MSComctlLib.NodeDim strSql As StringDim db As DAO.DatabaseDim j As IntegerDim tmpnode As MSComctlLib.NodeDim strSql As StringDim strMsg As String Mỗi tmpnode Trong tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True strKey =tmpnode.Key j =j + 1 End IfNext If j> 1 Then MsgBox "Các nút đã chọn:" &j &vbCr &"Chỉ chọn một nút để Delete. ", VbCritical," cmdDelete () "Thoát Sub End IfSet tmpnode =tv.Nodes.Item (strKey) tmpnode.Selected =TrueSet db =CurrentDb'kiểm tra trước số lượng nút con của NodeIf tmpnode.Children> được đánh dấu 0 Sau đó'Cảnh báo:'Xóa các nút ngẫu nhiên sẽ để lại các nút mồ côi' trong Bảng và dẫn đến lỗi, trong quá trình tải Chế độ xem cây tiếp theo strMsg ="Nút được đánh dấu có" &tmpnode.Children &"Trẻ em. "&vbCr &" Cũng xóa các Nút con? "Nếu MsgBox (strMsg, vbYesNo + vbCritical," cmdDelete () ") =vbYes Sau đó 'Kiểm tra kỹ và nhận xác nhận. strMsg =" Chỉ xóa tập hợp các Nút Con sâu nhất "&vbCr strMsg =strMsg &"và Nút mẹ của chúng cùng một lúc." &vbCr &vbCr strMsg =strMsg &"Bạn có chắc chắn Tiếp tục ..?" Nếu MsgBox (strMsg, vbYesNo + vbCritical, "cmdDelete ()") =vbYes Sau đó Do Until tmpnode.Children =0 gật đầu =Val (Mid (tmpnode.Child.Key, 2)) 'Xóa nút con tv.Nodes.Remove tmpnode.Child.Index' Xóa bản ghi liên quan strSql ="XÓA Mẫu. *, Sample.ID FROM Sample WHERE (((Sample.ID) ="&gật đầu &")); "db.Execute strSql Loop Else Exit Sub End If Else Exit Sub End IfEnd Nếu gật đầu =Val (Mid (tmpnode.Key, 2) )) 'Delete Parent tv.Nodes.Remove tmpnode.Key tv.Refresh' Delete Marked Recor d strSql ="XÓA Mẫu. *, Sample.ID TỪ Mẫu Ở ĐÂU (((Sample.ID) =" &gật đầu &"));" db.Execute strSql 'Xóa Giá trị Thuộc tính khỏi Mẫu Với Tôi .TxtKey ="". TxtParent ="" .Text ="" End With Set db =Nothing End SubPrivate Sub cmdExpand_Click () Dim nodeExp As MSComctlLib.Node For Each gậtExp Trong tv.Nodes gật đầuExp.Expanded =True NextEnd SubPrivate Sub cmdCollapse_Click () Dim gật đầu dưới dạng MSComctlLib. Node For Each NodeExp In tv.Nodes gật đầu. .Objecttv.Nodes.Clear'Pass ImageList tham chiếu điều khiển đến Thuộc tính ImageList của TreeView.Set ImgList =Me.ImageList0.Objecttv.ImageList =ImgListstrSql ="CHỌN ID, Desc, ParentID FROM Sample; "Đặt db =CurrentDbSet rst =db.OpenRecordset (" sample ", dbOpenTable) Do While Not rst.EOF And Not rst.BOF If Nz (rst! ParentID," ") =" "Sau đó gật đầu =KeyPrfx &CStr (rst! ID) strText =rst! desc tv.Nodes.Add,, gật đầu, strText, "folder_close", "folder_open" Khác ParentKey =KeyPrfx &CStr (rst! ParentID) gật đầu =KeyPrfx &CStr ( rst! ID) strText =rst! desc tv.Nodes.Add ParentKey, tvwChild, gật đầu, strText, "left_arrow", "right_arrow" End Ifrst.MoveNextLooprst.CloseOn Error GoTo 0Set rst =NothingSet db =NothingEnd SubPrivate Nheck Tree As Object) Dim xnode As MSComctlLib.NodeSet xnode =Node If xnode.Checked Then xnode.Selected =True With Me .TxtKey =xnode.Key If xnode.Text =xnode.FullPath Then .TxtParent ="" Else .TxtParent =xnode. Parent.Key End If .Text =xnode.Text End With Else xnode.Selected =False With Me .TxtKey ="" .TxtParent ="" .Text ="" End WithEnd IfEnd SubChế độ xem Thiết kế của Biểu mẫu frmSample được đưa ra dưới đây:
Chúng tôi hoan nghênh các quan sát, bình luận, đề xuất của bạn.
Cơ sở dữ liệu Demo được đính kèm để tải xuống.
ĐỐ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à khóa đố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