CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 208

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

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

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

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;

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.