208
Chương 6: Windows Form
Bạn có thể hiện thực một
ComboBox
có tính năng auto-complete bằng cách tạo một
điều kiểm tùy biến chép đè phương thức
OnKeyPress
và
OnTextChanged
.
Có nhiều biến thể khác nhau đối với điều kiểm có tính năng auto-complete. Đôi lúc, điều kiểm
lấp đầy các giá trị dựa trên danh sách các phần vừa chọn (như Microsoft Excel thường làm khi
bạn nhập giá trị cho cell) hoặc xổ xuống một danh sách các giá trị gần giống (như Microsoft
Internet Explorer thường làm khi bạn gõ URL). Bạn có thể tạo một
ComboBox
có tính năng
auto-complete bằng cách thụ lý sự kiện
KeyPress
và
TextChanged
, hoặc bằng cách tạo một lớp
tùy biến dẫn xuất từ
ComboBox
và chép đè phương thức
OnKeyPress
và
OnTextChanged
.
Trong phương thức
OnKeyPress
,
ComboBox
xác định có thực hiện một thay thế auto-complete
hay không. Nếu người dùng nhấn một phím ký tự (một mẫu tự chẳng hạn) thì việc thay thế có
thể được thực hiện, nhưng nếu người dùng nhấn một phím điều khiển (phím backspace hoặc
phím mũi tên chẳng hạn) thì không thực hiện gì cả. Phương thức
OnTextChanged
thực hiện
việc thay thế sau khi việc xử lý phím hoàn tất. Phương thức này tìm item trùng khớp đầu tiên
đối với phần text hiện thời, rồi thêm vào phần còn lại của text trùng khớp. Sau khi text được
thêm vào,
ComboBox
sẽ chọn (bôi đen) các ký tự giữa điểm chèn hiện tại và điểm cuối của text.
Việc này cho phép người dùng tiếp tục gõ và thay thế auto-complete nếu nó không phải là
những gì người dùng muốn.
Dưới đây là phần mã cho lớp
AutoCompleteComboBox
:
using System;
using System.Windows.Forms;
public class AutoCompleteComboBox : ComboBox {
// Biến cờ dùng khi một phím đặc biệt được nhấn
// (trong trường hợp này, thao tác thay thế text sẽ bị bỏ qua).
private bool controlKey = false;
// Xác định xem phím đặc biệt có được nhấn hay không.
protected override void OnKeyPress(
System.Windows.Forms.KeyPressEventArgs e) {
base.OnKeyPress(e);
if (e.KeyChar == (int)Keys.Escape) {
// Xóa text.
this.SelectedIndex = -1;
this.Text = "";
controlKey = true;