Giới thiệu.
Trong MS-Access, chúng tôi có ListBox và hầu hết nó sẽ chỉ có một vài cột dữ liệu, để tìm (các) mục một cách nhanh chóng. Dữ liệu nguồn cho điều khiển này được nhập trực tiếp vào Thuộc tính Nguồn-Hàng dưới dạng danh sách Giá trị hoặc được tải từ Bảng hoặc Truy vấn nguồn. Điều khiển Hộp tổ hợp giữ cho dữ liệu của nó ẩn và cần một cú nhấp chuột để hiển thị danh sách để chọn. Các Đối tượng này đã được tích hợp sẵn dưới dạng Kiểm soát Truy cập.
Nhưng, có một Kiểm soát Danh sách khác mà chúng tôi luôn sử dụng trong cơ sở dữ liệu của mình, bạn có đoán được nó là gì không? Có, Điều khiển Chế độ xem Bảng Dữ liệu. Các bản ghi được hiển thị từ Bảng, Truy vấn. Trong tất cả các trường hợp này, chúng tôi thấy dữ liệu trong Dạng xem biểu dữ liệu như một danh sách lớn.
Nhưng cũng có các nhóm Điều khiển khác trong Microsoft Access, Điều khiển ActiveX. Chúng ta đã quen thuộc với một trong những điều khiển này - Điều khiển Hộp thoại Chung hoặc Điều khiển Trình duyệt Tệp.
Ở đây, chủ đề là Windows ListView Control. Bạn có thể hình dung nó như một Đối tượng tương tự như Windows Explorer, nơi bạn có thể hiển thị các Mục có Biểu tượng Hình ảnh, Biểu tượng Hình ảnh nhỏ, dưới dạng Danh sách hoặc như Ngăn Xem chi tiết của Người khám phá. Bạn có thể tải dữ liệu Bảng / Truy vấn của mình vào điều khiển này để hiển thị chúng trong Dạng xem Biểu dữ liệu, sắp xếp lại các Cột hoặc Hàng, Sắp xếp các hàng, hiển thị Hình ảnh bên cạnh các mục, v.v. Các ngôn ngữ lập trình khác, như VB6, VB.NET, C #, v.v., sử dụng Windows ListView Control. Chúng ta sẽ xem cách chúng ta có thể sử dụng nó trong Cơ sở dữ liệu Microsoft Access.
Dưới đây là một màn hình Demo ListView đơn giản với một số dữ liệu mẫu nhanh:
Chúng tôi sẽ làm cho hiển thị giống như hình ảnh ở trên làm điểm bắt đầu của Hướng dẫn điều khiển ListView. Chúng tôi đã tải lên mười hàng dữ liệu vào điều khiển ListView, với một vài dòng Mã VBA. Điều khiển ActiveX ListView mà bạn có thể không tìm thấy trong danh sách hiện có của Điều khiển ActiveX trong Access. Chúng tôi phải thêm tệp Thư viện của Điều khiển này MSCOMCTL.OCX từ thư mục C:\ Windows \ System32 vào Access Reference Thư viện. Sau khi nó được thêm vào, bạn có thể tìm thấy điều khiển này với tên Microsoft ListView Control, Phiên bản 6.0 trong số các điều khiển ActiveX khác.
Vì vậy, hãy để chúng tôi thêm MSCOMCTL.OCX Thư viện Tệp vào cơ sở dữ liệu của chúng tôi. Đây là thư viện nguồn của ActiveX Controls như ListView, TreeView, ImageList. Nếu bạn đã xem qua TreeView trước đó của chúng tôi hướng dẫn điều khiển Trang, sau đó bạn đã được giới thiệu với điều khiển này.
Tệp Thư viện Điều khiển Chung của Windows.
Làm như sau để đính kèm Tệp MSCOMCTL.OCX:
-
Mở Cơ sở dữ liệu của bạn và mở Cửa sổ soạn thảo VBA (Alt + F11).
-
Chọn Tham khảo… từ T ools Menu .
-
Nhấp vào nút Duyệt qua để tìm Tệp MSCOMCTL.OCX (Điều khiển chung của Microsoft Windows.)
-
Tìm kiếm tệp ở trên trong C:\ Windows \ System32 \ Thư mục, nếu bạn có Hệ thống 32 Bit hoặc bạn có Hệ điều hành Windows 11.
-
Nếu bạn không thể tìm thấy nó ở đó, hãy tìm Thư mục C:\ Windows \ sysWOW64 \ (Hệ thống 64 bit), và ở đó bạn sẽ tìm thấy tệp này.
-
Chọn tệp MSCOMCTL.OCX và nhấp vào Mở Nút lệnh để đính kèm tệp vào Cơ sở dữ liệu của bạn.
-
Nhấn Alt + F11 một lần nữa để quay lại Cửa sổ Cơ sở dữ liệu.
Hãy để chúng tôi thiết kế một Biểu mẫu phù hợp với Hình ảnh trên được đưa ra ở đầu trang này.
-
Tạo Biểu mẫu trống mới.
-
Chọn Nút điều khiển ActiveX từ Nhóm tùy chọn điều khiển.
-
Tìm và chọn Điều khiển Microsoft ListView từ danh sách được hiển thị và nhấp vào nút OK để chèn điều khiển ListView vào Phần chi tiết của biểu mẫu.
-
Nhấp và giữ vào tay cầm thay đổi kích thước của điều khiển, ở góc dưới cùng bên phải, kéo sang phải và xuống để làm cho nó đủ lớn như hình ảnh mẫu được đưa ra ở trên.
-
Kéo chính điều khiển ListView sang phải và xuống để tạo một số lề ở bên trái và để lại đủ không gian phía trên để tạo Nhãn tiêu đề.
-
Nhấp vào Điều khiển ListView để chọn nó, nếu nó không ở trạng thái đã chọn.
-
Hiển thị Trang thuộc tính và thay đổi tên của Điều khiển ListView thành ListView1 .
-
Tạo điều khiển Nhãn ở trên và thay đổi Chú thích giá trị thuộc tính cho Hướng dẫn điều khiển ListView . Bạn có thể định dạng Phụ đề nhãn với kích thước phông chữ, màu sắc, v.v. theo cách bạn thích.
-
Tạo Nút lệnh bên dưới điều khiển LlistView và thay đổi Giá trị thuộc tính tên của nó thành cmdClose và Chú thích của nó Giá trị tài sản để Đóng. Thiết kế hoàn thành sẽ trông giống như sau khi thiết kế của bạn hoàn thành:
-
Bây giờ, Lưu Biểu mẫu với tên: ListViewTutorial và giữ Biểu mẫu ở chế độ xem thiết kế.
-
Nhấn Alt + F11 để quay lại Cửa sổ mô-đun lớp của Biểu mẫu.
Mã VBA.
-
Sao chép và Dán mã sau vào Mô-đun VBA của Biểu mẫu, thay thế các dòng mã hiện có nếu có:
Option Compare Database Option Explicit Dim lvwList As MSComctlLib.ListView Dim lvwItem As MSComctlLib.ListItem Dim ObjImgList As MSComctlLib.ImageList Const prfx As String = "X" Private Sub cmdClose_Click() DoCmd.Close acForm, Me.Name End Sub Private Sub Form_Load() Call LoadListView End Sub Private Function LoadListView() Dim intCounter As Integer Dim strKey As String 'Assign ListView Control on Form to lvwList Object Set lvwList = Me.ListView1.Object 'Create Column Headers for ListView With lvwList .ColumnHeaders.Clear 'initialize header area 'Parameter List: 'Syntax: .ColumnHeaders.Add Index, Key, Text, Width, Alignment, Icon .ColumnHeaders.Add , , "Name", 2500 .ColumnHeaders.Add , , "Age", 1200 .ColumnHeaders.Add , , "Height", 1200 .ColumnHeaders.Add , , "weight", 1200 .ColumnHeaders.Add , , "Class", 1200 End With 'Initialize ListView Control While lvwList.ListItems.Count > 0 lvwList.ListItems.Remove (1) Wend With lvwList For intCounter = 1 To 10 strKey = prfx & CStr(intCounter) ' 'Syntax: .ListItems.Add(Index, Key, Text, Icon, SmallIcon) Set lvwItem = .ListItems.Add(, strKey, "Student " & intCounter) 'Add next columns of data as sub-items of ListItem With lvwItem 'Parameters = .Add Index,Key,Text,Report Icon,TooltipText .ListSubItems.Add , strKey & CStr(intCounter), CStr(5 + intCounter) .ListSubItems.Add , strKey & CStr(intCounter + 1), CStr(135 + intCounter) .ListSubItems.Add , strKey & CStr(intCounter + 2), CStr(40 + intCounter) .ListSubItems.Add , strKey & CStr(intCounter + 3), ("Class:" & intCounter) End With Next 'reset lvwItem object Set lvwItem = Nothing End With lvwList.Refresh End Function
-
Lưu Biểu mẫu với tên ListView Control Tutorial-01.
Chế độ xem Demo của Biểu mẫu.
-
Mở Biểu mẫu ở Chế độ xem Thường để xem quá trình tạo của chúng tôi.
Nếu bạn thấy biểu mẫu của mình có màn hình giống như hình ảnh sau đây thì bạn đang đi đúng hướng.
Chúng tôi phải thực hiện một số thay đổi trong cài đặt Thuộc tính của điều khiển Listview. Chúng tôi đã thay đổi tên của điều khiển ListView thành ListView1 trong Trang thuộc tính của Access. Tuy nhiên, điều khiển ListView có Trang thuộc tính riêng của nó. Chúng tôi sẽ sử dụng trang thuộc tính riêng của điều khiển ListView để thực hiện các thay đổi đối với điều khiển. Một số Giá trị Thuộc tính cũng xuất hiện trên Trang Thuộc tính Truy cập.
-
Nhấp chuột phải vào điều khiển ListView và đánh dấu Đối tượng ListViewCtrl từ danh sách tùy chọn được hiển thị và chọn Thuộc tính từ menu lối tắt được hiển thị.
-
Hình ảnh trang Thuộc tính được đưa ra dưới đây:
Trên Trang thuộc tính ở trên cùng, có các Tab với các nhóm tùy chọn khác. Chúng tôi đang ở trên tab Chung theo mặc định. Trên tab Chung, có các tùy chọn ở bên trái của điều khiển và các hộp kiểm ở bên phải. Chúng tôi sẽ chỉ thực hiện các thay đổi trên hai Thuộc tính, điều khiển ListView trên biểu mẫu ở trạng thái tắt theo mặc định, chúng tôi phải kích hoạt nó.
Màn hình điều khiển ListView có thể được thay đổi thành các chế độ khác nhau như Mục danh sách có Biểu tượng hình ảnh lớn, với Biểu tượng hình ảnh nhỏ, trong ListView hoặc trong Chế độ xem báo cáo - giống như xuất hiện trong Hình ảnh đầu tiên ở trên.
-
Bật Kiểm soát ListView bằng cách đặt dấu kiểm vào Đã bật Thuộc tính, ở phía bên phải.
-
Chọn lvwReport từ tùy chọn Chế độ xem danh sách thả xuống ở bên trái.
-
Nhấp vào Áp dụng Nút trên Điều khiển để lưu thay đổi.
-
Nhấp vào nút OK để đóng Trang thuộc tính.
-
Lưu Biểu mẫu với các thay đổi và sau đó mở ở Chế độ xem bình thường.
-
Bạn sẽ thấy kết quả giống như Hình ảnh được đưa ra ở đầu trang này, ngoại trừ màu nền của biểu mẫu và các thuộc tính biểu mẫu khác.
Sơ đồ chức năng của chương trình.
Trước khi đến với Mã VBA, sẽ rất thú vị khi biết cách các mục dữ liệu được tải vào Điều khiển ListView. Việc sắp xếp dữ liệu cho một điều khiển ListBox rất đơn giản. Tuy nhiên, quy trình tải dữ liệu của điều khiển ListView hoàn toàn khác. Nó không theo thứ tự logic mà chúng ta thường nhận thức. Khi bạn biết luồng dữ liệu từ nguồn đến một hàng dưới dạng biểu đồ, hay chúng ta gọi nó là biểu đồ luồng, sẽ không khó để hiểu Mã VBA và chức năng của nó.
Sơ đồ Luồng Dữ liệu.
-
Hộp ở góc trên cùng bên trái đại diện cho điều khiển ListView.
-
Bước đầu tiên của việc chuẩn bị Danh sách là tạo các nhãn tiêu đề hoặc Tiêu đề cột của danh sách. Bạn có thể thấy điều này trong sơ đồ, tiêu đề cột có màu đỏ. Điều này bạn có thể so sánh với các tiêu đề trường trong Dạng xem Biểu dữ liệu của Bảng. Mỗi Tiêu đề Cột được tải vào điều khiển ListView trong thành viên Đối tượng ColumnHeaders. ColumnHeaders.Add () của điều khiển ListView được gọi năm lần để gán từng nhãn cột, lần lượt vào điều khiển ListView.
-
Hành động cần thiết để thực hiện năm bước tiếp theo là điều quan trọng cần lưu ý. Chúng đại diện cho một bản ghi duy nhất với năm Trường dữ liệu. Nhưng chúng được tải vào điều khiển ListView theo hai nhóm bước khác nhau hoặc giả sử chúng đang được tải vào hai thành viên Đối tượng khác nhau ( ListItems và ListSubItems ) của điều khiển ListView.
-
Trường đầu tiên (Giá trị cột) được tải vào ListItems của điều khiển ListView Đối tượng của Thêm phương pháp. Nếu bạn nhìn vào hình ảnh ở trên cùng, giá trị cột đầu tiên của bản ghi đầu tiên Student1 được tải trong ListItems Đối tượng ( ListView . ListItems.Add ) của điều khiển ListView.
-
Từ cột thứ 2 trở đi, tất cả các giá trị cột khác được tải vào ListSubItems Đối tượng của ListItems Đối tượng, cái này đến cái khác. ListSubItems.Add Phương pháp ( ListView.ListItems .Item (x). ListSubItems.Add ) được gọi bốn lần để chèn các Giá trị vào Tuổi, Chiều cao, Cân nặng, và Lớp học các cột riêng lẻ.
-
-
Các bước hành động hai cấp này là bắt buộc để tải một hàng giá trị hoàn chỉnh vào Điều khiển ListView. sơ đồ được vẽ bằng hai hàng dữ liệu trong điều khiển ListView.
Với hình ảnh trên, tôi chắc chắn rằng bạn sẽ không gặp khó khăn gì khi hiểu Mã VBA ở trên thực hiện những gì trong Chương trình.
Hãy để chúng tôi đi tới Phân đoạn mã VBA.
Tại khu vực khai báo Toàn cục của Mô-đun, chúng ta đã khai báo Đối tượng ListView, Đối tượng ListItem, Đối tượng ImageList và một Biến Hằng số với Giá trị Chuỗi LV.
Dim lvwList As MSComctlLib.ListView Dim lvwItem As MSComctlLib.ListItem Dim ObjImgList As MSComctlLib.ImageList Const prfx As String = "X"
lvwList Biến được khai báo dưới dạng Đối tượng ListView, lvwItem được khai báo dưới dạng ListItem Đối tượng của Kiểm soát ListView, ObjImgList được khai báo dưới dạng Danh sách hình ảnh Vật. ImageList Object là một điều khiển ActiveX khác có thể được tải với các Biểu tượng Hình ảnh để sử dụng trong các điều khiển TreeView, ListView. Chúng tôi sẽ giữ quyền kiểm soát ImageList sang một bên trong thời gian này và sẽ xử lý nó sau. Hằng số Prfx được sử dụng trong ListItems.Add Khóa-Giá trị của phương pháp tiền tố , một trong những thông số tùy chọn . Khóa-giá trị phải thuộc Loại chuỗi.
LoadListView () Chức năng là chương trình chính.
Tên điều khiển ListView của chúng tôi trên Biểu mẫu là ListView1 . Câu lệnh đầu tiên trong chương trình:
Set lvwList = Me.ListView1.Object
Chỉ định ListView1 kiểm soát trên Biểu mẫu vào biến Đối tượng lvwList được khai báo trong khu vực Khai báo toàn cầu.
Tiếp theo, chúng ta sẽ chuẩn bị để tải thông tin Tiêu đề cột. Đầu tiên, chúng tôi khởi tạo đối tượng ColumnHeader để đảm bảo rằng nó trống. Khi chúng ta liên tục chạy chương trình, điều khiển có xu hướng giữ lại các giá trị đã tải trước đó trong điều khiển. Khi bạn mở và đóng biểu mẫu này nhiều lần, sau khi tắt ColumnHeaders.Clear tuyên bố, bạn sẽ biết sự khác biệt. Bộ tiêu đề giống nhau được thêm vào điều khiển mọi lúc và sẽ xuất hiện trong điều khiển với các hàng trống bên dưới.
Điều này bạn có thể kiểm tra và xác nhận bằng tay. Làm như sau:
-
Mở Biểu mẫu Demo một lần rồi đóng biểu mẫu,
-
Mở Biểu mẫu trong Dạng xem Thiết kế.
-
Nhấp chuột phải vào Điều khiển ListView, đánh dấu Đối tượng ListViewCtrl Tùy chọn và chọn Thuộc tính từ danh sách hiển thị.
-
Chọn Tab có Nhãn Tiêu đề Cột.
-
Ở đó, bạn có thể tìm thấy Tên Tiêu đề Cột đầu tiên trong Điều khiển Văn bản và phía trên Điều khiển Văn bản, Giá trị Chỉ mục 1.
-
Trỏ Con trỏ chuột sang phía bên phải của hộp Số chỉ mục, Một điều khiển sẽ xuất hiện với các mũi tên chỉ sang các hướng trái, phải.
-
Nhấp vào mũi tên phải để hiển thị từng nhãn Cột khác trong điều khiển Văn bản, với sự thay đổi của số chỉ mục.
-
Nếu bạn mở và đóng Biểu mẫu một lần nữa, Tab trên sẽ có hai bộ Nhãn Tiêu đề Cột giống nhau.
lvwList.ColumnHeaders.Add(Index, Key, Text, Width, Alignment, Icon)
Tất cả các tham số là tùy chọn.
With lvwList .ColumnHeaders.Clear 'initialize header area 'Parameter List: 'Syntax: .ColumnHeaders.Add Index, Key, Text, Width, Alignment, Icon .ColumnHeaders.Add , , "Name", 2500 .ColumnHeaders.Add , , "Age", 1200 .ColumnHeaders.Add , , "Height", 1200 .ColumnHeaders.Add , , "weight", 1200 .ColumnHeaders.Add , , "Class", 1200 End With
Giá trị Chỉ mục được tự động gán là 1, 2, 3 khi chạy số sê-ri.
Chìa khóa giá trị thuộc kiểu dữ liệu Chuỗi, nhưng không được sử dụng cho Tiêu đề Cột, nếu cần, nó có thể được sử dụng.
Văn bản Giá trị được hiển thị trên điều khiển dưới dạng Nhãn cột.
Dựa trên kích thước chiều rộng dữ liệu cần thiết để hiển thị bên dưới tiêu đề cột, chúng tôi có thể chỉ định giá trị chiều rộng gần đúng tính bằng Pixel.
Nếu giá trị Căn chỉnh văn bản bị bỏ qua thì Căn chỉnh trái ( 0 - lvwAlignmentLeft ) giá trị được lấy làm mặc định. Nó có thể được Căn phải ( 1 - lvwAlignmentRight ) hoặc Căn giữa ( 2 - lvwAlignmentCenter ).
Sau khi tải nhãn tiêu đề cột, bước tiếp theo là tải giá trị Cột đầu tiên của hàng đầu tiên của bản ghi đầu tiên. Trước đó, chúng ta phải khởi tạo ListItems Đối tượng với đoạn mã sau:
'Initialize ListView Control While lvwList.ListItems.Count > 0 lvwList.ListItems.Remove (1) Wend
Khối Mã tiếp theo tải các mục danh sách bản ghi một hàng tại một thời điểm và tổng cộng mười hàng với một số giá trị không đổi với một số thay đổi cho mục đích demo. Quá trình này chúng tôi đã đặt trong Đối với ... Tiếp theo vòng lặp chạy mười lần, tạo ra mười hàng dữ liệu.
With lvwList For intCounter = 1 To 10 strKey = prfx & CStr(intCounter) ' 'Syntax: .ListItems.Add(Index, Key, Text, Icon, SmallIcon) Set lvwItem = .ListItems.Add(, strKey, "Student " & intCounter) 'Add next columns of data as sub-items of ListItem With lvwItem ' Syntax: .ListSubItems.Add Index,Key,Text,Report Icon,TooltipText .ListSubItems.Add , strKey & CStr(intCounter), CStr(5 + intCounter) .ListSubItems.Add , strKey & CStr(intCounter + 1), CStr(135 + intCounter) .ListSubItems.Add , strKey & CStr(intCounter + 2), CStr(40 + intCounter) .ListSubItems.Add , strKey & CStr(intCounter + 3), ("Class:" & intCounter) End With Next 'reset lvwItem object Set lvwItem = Nothing End With
Câu lệnh đầu tiên trong vòng lặp For ... Next strKey =prfx &Cstr (intcounter) chuẩn bị giá trị Khóa duy nhất cho ListItem đầu tiên (Cột đầu tiên).
Tất cả các tham số của ListItems.Add phương thức là tùy chọn và ba tham số đầu tiên Chỉ mục, Khóa, Văn bản được gán theo thứ tự giống như Tiêu đề Cột và hai tham số còn lại là một biểu tượng và một tham chiếu hình ảnh biểu tượng nhỏ.
Khi giá trị hàng của cột đầu tiên được gán cho ListItem (lvwList.ListItems), tham chiếu đối tượng này được lưu trong lvwItem đối tượng để dễ dàng gọi đối tượng con cấp tiếp theo (đối tượng ListSubItems) để tránh viết một tham chiếu đối tượng dài dòng:
lvwList.ListItems.Item (chỉ mục) .ListSubItems.Add ()
Được thể hiện ở dạng ngắn với lvwItem.ListSubItems.Add ()
Ba Tham số đầu tiên của phương thức ListSubItems.Add () và thứ tự truyền giống như ListItem sau đó có Biểu tượng tham chiếu hình ảnh theo sau là Chú giải công cụ Tham số văn bản.
Đối với giá trị Khóa của mỗi cột, tôi đã thêm giá trị đang chạy hiện tại của biến điều khiển For ... Next Loop + một số giá trị để làm cho nó trở thành duy nhất trên tất cả các cột. Giá trị tham số Khóa có thể bị bỏ qua, nhưng bạn nên làm quen với nó.
Phương thức ListSubItems.Add () được gọi bốn lần để thêm cột thứ hai trở đi vào điều khiển ListView.
Các bước này được lặp lại chín lần nữa để tải tất cả mười bản ghi mẫu vào Điều khiển ListView.
Cơ sở dữ liệu Demo điều khiển ListView ở trên được đính kèm để chạy và học ngay lập tức.
Trong phần tiếp theo của hướng dẫn, chúng ta sẽ học cách tìm kiếm và tìm giá trị từ điều khiển chế độ xem danh sách và cách sắp xếp lại các Cột giống như chúng ta làm trong Dạng xem biểu dữ liệu.
- 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 các nút TreeView
- Gán hình ảnh cho các nút TreeView-2
- Dấu kiểm Kiểm soát TreeView Thêm Xóa
- Quyền truy cập thả xuống TreeView ImageCombo
- Sắp xếp lại các nút TreeView bằng cách kéo và thả
- Kiểm soát ListView với MS-Access TreeView
- Sự kiện kéo thả trong điều khiển ListView
- Kiểm soát TreeView với các biểu mẫu con