2011-12-26 29 views
7

Tôi có một hộp văn bản gửi một số lệnh đến một công cụ. Tôi đã thêm tính năng AutoComplete vào hộp văn bản này và mọi thứ sẽ dễ dàng hơn ngay bây giờ.Ghi đè hoặc quá tải Tự động hoàn thành Quy tắc thêm

Điều tôi đang suy nghĩ để cải thiện điều này, là thêm khả năng khi người dùng nhập lệnh (chỉ một văn bản) trong khi Tự động hoàn tất tìm thấy kết quả khớp cũng hiển thị mô tả cho lệnh đó.

Hiện tại, tôi có tất cả các chuỗi AutoComplete trong tệp văn bản và tôi tải nó khi ứng dụng bắt đầu. Textfile chứa dòng như thế này:

*IDN? #Query the instrument for identification 
*RST #Resets the instrument 

Vì vậy, những gì đang xảy ra trong ứng dụng của tôi là vì AutoComplete đang ở chế độ SuggestAppend, mô tả của lệnh cũng được vào hộp văn bản (điều này cũng sẽ như vậy nếu tôi chỉ đặt nó trong Suggest mode)

những gì tôi cần biết là làm thế nào để buộc các AutoComplete để thêm văn bản khi nó

  1. không thêm bất kỳ văn bản bắt đầu từ # char trong khi phụ thêm văn bản đề nghị
  2. Trim() văn bản để tránh điều đó không gian mà bạn nhìn thấy trong nguồn textfile

UPDATE 1 Ok, tôi nghĩ rằng cách duy nhất là để tạo ra một lớp mới và kế thừa từ AutoCompleteStringCollection Và trong mới này lớp học, bằng cách nào đó ghi đè lên phương pháp reponsible cho trở lại (phụ thêm) văn bản gợi ý. Tôi thực sự không có ý tưởng những gì tôi nên làm:

class MyAutoCompleteCollection : AutoCompleteStringCollection 
{ 
    //How to override Get function of AutoCompleteStringCollection class? 
    //It is not avilable to override :(
} 

UPDATE 2 tôi phát hiện ra rằng phương pháp trong AutoCompleteStringCollection không overridable. Tôi đang tìm kiếm một cách để thay đổi cách thức [] (thành thật mà nói tôi không biết phải gọi nó là gì!) Hoạt động. Có ai có bất kỳ ý tưởng về điều này?

enter image description here

CẬP NHẬT 3 Khi văn bản mà không #DESC đi vào textbox, tôi có một xử lý sự kiện cho KeyDown mà sẽ chuyển lệnh để các nhạc cụ.

+0

Bạn có thể đăng mã hiện tại của bạn để xử lý tự động hoàn thành không? Nó dễ dàng hơn để đề xuất giải pháp mã bằng cách xem mã. –

+0

Có lẽ bạn nên sử dụng '.Xóa (base.Text.LastIndexOf ('#'), base.Text.Length - 1) .Trim();' trong thời điểm bạn tải tệp. –

+0

Không! toàn bộ ý tưởng là hiển thị văn bản sau # bên trong hộp tự động điền! Tôi chỉ muốn nó không đi vào bên trong hộp văn bản của tôi. –

Trả lời

1

Thay vì cố gắng để chiến đấu với chức năng tự động hoàn mà Microsoft đã thực hiện, tôi đề nghị rằng bạn sử dụng một đa cột combobox để thay thế.

Tất cả những cái mà chúng tôi đã sử dụng hỗ trợ tự động hoàn thành, vì vậy bạn có thể lưu trữ lệnh của bạn trong cột đầu tiên và có nó là giá trị của bạn và sau đó lưu mô tả của bạn trong cột thứ hai.

Có một số lượng lớn các điều khiển có sẵn để mua (Infragistics, Intersoft, Syncfusion, v.v.) và bạn có thể tìm thấy các phiên bản miễn phí hoặc tự xây dựng trên các trang khác nhau như CodeProject.

Tuyến đường này sẽ giúp bạn tiết kiệm rất nhiều thời gian.

1

Luôn sử dụng phương thức SuggestAppend và tải tệp văn bản của bạn dưới dạng Nguồn tùy chỉnh cho tính năng Tự động hoàn tất của hộp văn bản.

Bạn có thể sử dụng các sự kiện Leave của TextBox để loại bỏ tất cả các văn bản sau khi # và cắt kết quả:

private void textBox1_Leave(object sender, EventArgs e) 
{ 
    textBox1.Text = textBox1.Text.Remove(textBox1.Text.LastIndexOf("#")).Trim(); 
} 

Bằng cách này, mô tả nằm trong danh sách tự động hoàn toàn, nhưng ngay sau khi bạn tab ra hoặc rời khỏi hộp văn bản, chỉ còn lại lệnh.

+0

Xin chào, cảm ơn bạn đã trả lời. Tôi xin lỗi rằng tôi quên đề cập đến tôi cũng có một sự kiện KeyDown cho hộp văn bản mà trên phím Enter sẽ chuyển lệnh cho công cụ. Điều đó cũng nên được chăm sóc (tôi nghĩ nó sẽ giống như phương pháp của bạn ...) Tôi sẽ thử nó sớm. –

-1

Thuộc tính AutoComplete của hộp văn bản được đặt SuggestAppend có nghĩa là nó thêm cả văn bản và mô tả. Vì vậy, bạn cần đặt thuộc tính AutoComplete của Textbox thành giá trị "Suggest".

Theo MSDN tài sản Autocomplete thể mất bốn giá trị enum cụ thể là

Sau đây là các giá trị của AutoCompleteMode:

Append : Appends the remainder of the most likely candidate string to the existing characters, highlighting the appended characters. 

Suggest : Displays the auxiliary drop-down list associated with the edit control. This drop-down is populated with one or more suggested completion strings. 

SuggestAppend : Appends both Suggest and Append options. 

None : Disables automatic completion. This is the default. 

Hãy thử những giá trị thay vì subclassing AutoCompleteStringCollection.

+0

Hmmm ... ngay cả trong chế độ Đề xuất, nếu người dùng nhấn enter, chuỗi được đề xuất đã chọn sẽ nhận được vào hộp văn bản, không có sự khác biệt so với SuggestAppend. –

+0

Tôi nghĩ rằng có một số cách gõ mã. Có lẽ bạn cần xác minh ngay từ đầu. Tôi đã dán liên kết có ví dụ hoàn chỉnh, bạn có thể sử dụng nó như một tài liệu tham khảo và xác minh chéo nó. http://technet.microsoft.com/en-us/query/chff42zw –

0

Dưới đây là liên kết trong đó có các ví dụ hoàn chỉnh cho Autocomplete

http://technet.microsoft.com/en-us/query/chff42zw 
0

Là câu trả lời cho cập nhật của bạn nr. 2: [] thực sự là thuộc tính chỉ mục.

Lớp học của bạn triển khai bộ sưu tập. Bạn có thể nhận được món hàng với chỉ số X bằng cách sử dụng mã collowing:

var thirdItem = myAutoCompleteCollectionInstance[3]; 

thuộc tính Index có thể được tạo ra bằng tay bằng cách sử dụng mã dưới đây, bạn có thể sử dụng để tùy chỉnh thứ tự bằng cách trả lại các mục mà bạn muốn hiển thị ở danh mục quy định .

public string this[int index] {get ...} {set...} 
Các vấn đề liên quan