 |
|
HỒ LÔ BIẾN |
|
Một vài mánh với
ComboBox trong VB6
ĐÀM MINH KHÔI |
|
Khi thiết kế biểu mẫu trong ứng dụng VB6, ô hỗn hợp
(combo box) thường được dùng để người sử dụng: hoặc
chọn một mục có sẵn trong danh sách bằng cách bấm
chuột vào hình tam giác bên phải của ô hỗn hợp này
rồi tìm mục cần chọn; hoặc gõ một trị mới để bổ sung
vào danh sách ấy. |
|
Bạn nghĩ xem, nếu không cần bấm chuột vào hình tam
giác bên phải của ô hỗn hợp mà danh sách vẫn hiện ra
(ứng với tình huống nào đấy) thì tiện cho người sử
dụng biết mấy. Bài này góp một ý tưởng sử dụng hàm
API để: |
|
• Tự động mở danh sách trên ô hỗn hợp khi người sử
dụng bấm vào một nút lệnh. (Khi áp dụng, các bạn có
thể đặt đoạn mã ở bất kỳ chỗ nào mình thích, chứ
không nhất thiết ở một nút lệnh.) |
|
• Trước khi thêm một mục vào danh sách, thực hiện
kiểm tra xem mục cần bổ sung đã có trong danh sách
chưa; nếu chưa thì thêm vào. Trong cả hai trường
hợp, ô hỗn hợp tự động mở danh sách, đồng thời chọn
sẵn mục mới thêm vào (hoặc mục đã có) cho người sử
dụng. |
|
Bạn hãy tạo một ứng dụng VB6 thuộc kiểu Standard
EXE. Trên biểu mẫu Form1 mặc định, bạn vẽ
một ô hỗn hợp, cùng hai nút lệnh có tên cmdThem
(với thuộc tính Caption là “Thêm mục mới”,
để thêm mục mới) và cmdDropDown (với thuộc
tính Caption là “Combo box tự mở”, để
mở danh sách). Tiếp theo, bạn gõ đoạn mã 1 vào đoạn
General Declarations của biểu mẫu. Trong đoạn
mã 1, hàm KiemTraTrungLap dùng để kiểm tra
xem mục cần thêm vào đã có trong danh sách hay chưa.
Sau cùng, bạn viết các thủ tục xử lý tình huống
Form_Load và tình huống Click cho hai nút
lệnh như đoạn mã 2. |
|
Đoạn mã 1
Private Declare Function SendMessage Lib
"user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal
wParam As Long, lParam As Any) As Long
Private Declare Function SendMessageByString
Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal
wParam As Long, lParam As String) As Long
Const CB_SHOWDROPDOWN = &H14F
Const CB_FINDSTRINGEXACT = &H158
Private Function KiemTraTrungLap(chwnd As
Long, Chuoi As String) As Boolean
KiemTraTrungLap = SendMessageByString(chwnd,
CB_FINDSTRINGEXACT, -1, ByVal Chuoi) > -1
End Function |
|
Đoạn mã 2
Private Sub cmdDropDown_Click()
SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, _
True, ByVal 0&
End Sub
Private Sub cmdThem_Click()
With Combo1
If Not KiemTraTrungLap(.hwnd, .Text) Then
.AddItem .Text ‘Chưa có thì thêm vào
End If
SendMessage .hwnd, CB_SHOWDROPDOWN, _
True, ByVal 0&
End With
End Sub
Private Sub Form_Load()
With Combo1
.AddItem "Chủ nhật"
.AddItem "Thứ hai"
.AddItem "Thứ ba"
.AddItem "Thứ tư"
.AddItem "Thứ năm"
.AddItem "Thứ sáu"
.AddItem "Thứ bảy"
.Text = .List(0) 'Chọn mục đầu tiên
End With
End Sub |
|
Vào lúc chạy, thử chọn nút [Combo box tự mở]
(như hình 1) hoặc thử gõ một mục mới (hoặc mục có
sẵn) vào ô hỗn hợp rồi chọn nút [Thêm mục mới],
bạn sẽ thấy “sướng mắt đã … tay” liền! |
|
Hình 1: Biểu mẫu lúc chạy |
 |
|
|
|
 |
|
 |