SỐ 111
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“Thêm mục mới”, để thêm mục mới) và cmdDropDown (với thuộc tính Caption“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
[Đầu trang]
Trang chủ
Nội lực "Peter Pan"
Cầu nối Intel Việt Nam
Chuyện trong tuần
Cõi người ta
Bình luận thị trường
Cõi Mô-bai
Chuyên đề
Bổ ngửa
Túi càn khôn IT
Hồ lô biến
Cảm về Game
Nhật ký e-CHÍP
Bản quyền Công ty Phần mềm & Truyền thông VASC
 99 Triệu Việt Vương HN; Tel: (04) 9782235 • email: echip@vasc.com.vn
Mọi chi tiết về kinh doanh và quảng cáo xin liên hệ Phòng Quảng cáo. Tel: (04) 9782077 kd@vasc.com.vn