Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Tạo ComboBox có tính năng auto-complete trong lập trình C#

  1. #1
    No Avatar
    baokhanhk28 Khách

    Mặc định Tạo ComboBox có tính năng auto-complete trong lập trình C#

    ? Bạn cần tạo một ComboBox tự động hoàn tất những gì người dùng gõ vào dựa trên danh sách các item của nó.
    » 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:
    Visual C# Code:
    1. using System;
    2. using System.Windows.Forms;
    3.  
    4. public class AutoCompleteComboBox : ComboBox {
    5.  
    6.     // Biến cờ dùng khi một phím đặc biệt được nhấn
    7.     // (trong trường hợp này, thao tác thay thế text sẽ bị bỏ qua).
    8.     private bool controlKey = false;
    9.  
    10.     // Xác định xem phím đặc biệt có được nhấn hay không.
    11.     protected override void OnKeyPress(
    12.       System.Windows.Forms.KeyPressEventArgs e) {
    13.  
    14.         base.OnKeyPress(e);
    15.  
    16.         if (e.KeyChar == (int)Keys.Escape) {
    17.        
    18.             // Xóa text.
    19.             this.SelectedIndex = -1;
    20.             this.Text = "";
    21.             controlKey = true;
    22.         }
    23.         else if (Char.IsControl(e.KeyChar)) {
    24.        
    25.             controlKey = true;
    26.         }
    27.         else {
    28.        
    29.             controlKey = false;
    30.         }
    31.     }
    32.  
    33.     // Thực hiện thay thế text.
    34.     protected override void OnTextChanged(System.EventArgs e) {
    35.    
    36.         base.OnTextChanged(e);
    37.  
    38.         if (this.Text != "" && !controlKey) {
    39.        
    40.             // Tìm kiếm item trùng khớp.
    41.             string matchText = this.Text;
    42.             int match = this.FindString(matchText);
    43.  
    44.             // Nếu tìm thấy thì chèn nó vào.
    45.             if (match != -1) {
    46.            
    47.                 this.SelectedIndex = match;
    48.  
    49.                 // Chọn (bôi đen) phần text vừa thêm vào để
    50.                 // nó có thể được thay thế nếu người dùng kiếp tục gõ.
    51.                 this.SelectionStart = matchText.Length;
    52.                 this.SelectionLength =
    53.                   this.Text.Length - this.SelectionStart;
    54.             }
    55.         }
    56.     }
    57. }

    Để thử nghiệm AutoCompleteComboBox, bạn có thể tạo một client đơn giản: thêm ComboBox vào form và thêm một số từ (word) vào ComboBox. Trong ví dụ này, các từ được lấy từ một file text và ComboBox được thêm vào form bằng mã lệnh. Bạn cũng có thể biên dịch lớp AutoCompleteComboBox thành một Class Library Assembly độc lập rồi thêm nó vào hộp công cụ, thế là bạn có thể thêm nó vào form lúc thiết kế.
    Visual C# Code:
    1. using System;
    2. using System.Windows.Forms;
    3. using System.Drawing;
    4. using System.IO;
    5.  
    6. public class AutoCompleteComboBoxTest : System.Windows.Forms.Form {
    7.  
    8.     // (Bỏ qua phần mã designer.)
    9.  
    10.     private void AutoCompleteComboBox_Load(object sender,
    11.       System.EventArgs e) {
    12.    
    13.         // Thêm ComboBox vào form.
    14.         AutoCompleteComboBox combo = new AutoCompleteComboBox();
    15.         combo.Location = new Point(10,10);
    16.         this.Controls.Add(combo);
    17.  
    18.         // Thêm một số từ (từ một file text) vào ComboBox.
    19.         FileStream fs = new FileStream("words.txt", FileMode.Open);
    20.         using (StreamReader r = new StreamReader(fs)) {
    21.  
    22.             while (r.Peek() > -1) {
    23.        
    24.                 string word = r.ReadLine();
    25.                 combo.Items.Add(word);
    26.             }
    27.         }
    28.     }
    29. }

    Trích từ "Các giải pháp lập trình C#"

  2. #2
    Ngày gia nhập
    03 2011
    Bài viết
    28

    bạn ơi cho hỏi , t có form như sau : nhập vào tên hàng,thì nó sẽ tự hiện ra những thứ liên quan ra bên dưới combox như bạn nói ,nhưng bạn chèn vào file text.doc ,còn tôi muốn chèn vào danh sách tên hàng có trong CSDL do người dùng đã nhập trước đó thì sao hả bạn,chỗ text.doc phải thay bằng câu lệnh gì !? mong đc bạn trả lời

  3. #3
    Ngày gia nhập
    03 2011
    Bài viết
    3

    Trích dẫn Nguyên bản được gửi bởi bigstone Xem bài viết
    bạn ơi cho hỏi , t có form như sau : nhập vào tên hàng,thì nó sẽ tự hiện ra những thứ liên quan ra bên dưới combox như bạn nói ,nhưng bạn chèn vào file text.doc ,còn tôi muốn chèn vào danh sách tên hàng có trong CSDL do người dùng đã nhập trước đó thì sao hả bạn,chỗ text.doc phải thay bằng câu lệnh gì !? mong đc bạn trả lời
    Ví dụ bạn select bảng có tên DanhSach trong CSDL có 2 cột ID và Ten

    SqlDataAdapter da = new SqlDataAdapter("Select * from DanhSach", connect);
    Datatable dt = new DataTable();
    da.Fill(dt);
    combobox.DataSource = dt;
    combobox.DisplayMember ="Ten";
    combobox.ValueMember= "ID";

  4. #4
    Ngày gia nhập
    05 2010
    Bài viết
    505

    cái này rất hay nhưng mình thử thấy nó hỗ trợ tiếng việt không tốt, mình thử kiểu gõ Telex nhưng 1 số từ không gõ được, ví dụ Hồ, Lương,....

  5. #5
    Ngày gia nhập
    03 2009
    Bài viết
    1

    Bạn ơi, mình bí rồi, làm sao để nó gợi ý hết các item mà chưa ký tự mình gõ.
    Ví dụ: gõ chữ "a"
    thi nó sẽ liệt kê các item có chứa chữ "a" trong đó: ga, ban,xe ga, coca, ba me...

Các đề tài tương tự

  1. Combobox không bắt được sự kiện keypress với e.keychar = 13 khi set thuộc tính Auto completeMode
    Gửi bởi chitviv trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 13-11-2011, 11:33 PM
  2. Tìm kiếm trong c# như tìm kiếm của google ( auto complete )
    Gửi bởi bigstone trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 24
    Bài viết cuối: 08-09-2011, 11:52 PM
  3. Auto-complete ComboBox không thể chọn được những items trùng nhau
    Gửi bởi luxubu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 18-08-2011, 09:43 AM
  4. Hỏi về tính năng auto complete của combo box
    Gửi bởi start_89 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 10-07-2009, 08:51 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn