Đây là một chương trình ngắn tái tạo lại vấn đề tôi vừa gặp phải. Điều này đã được biên dịch theo MS Windows 7 với .NET 4.0, chỉ trong trường hợp tạo sự khác biệt.ComboBox SelectionChangeCommitted event không hoạt động với AutoComplete
using System;
using System.Drawing;
using System.Windows.Forms;
// Compile with "csc /target:exe /out:comboboxbug.exe /r:System.dll /r:System.Drawing.dll /r:System.Windows.Forms.dll comboboxbug.cs"
// in a Visual Studio command prompt.
static class Program
{
[STAThread]
static void Main()
{
//Create a label.
Label oLabel = new Label();
oLabel.Location = new Point (10, 10);
oLabel.Size = new Size (100, 15);
oLabel.Text = "Combo box bug:";
// Create a combo-box.
ComboBox oComboBox = new ComboBox();
oComboBox.Location = new Point (10, 50);
oComboBox.Size = new Size (150, 21);
oComboBox.Items.AddRange (new object[]
{ "A", "A B", "A C", "A B C", "A C B", "A B C D", "A C B D" });
oComboBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
oComboBox.AutoCompleteSource = AutoCompleteSource.ListItems;
oComboBox.SelectionChangeCommitted
+= new EventHandler (comboBox_SelectionChangeCommitted);
// Create a form.
Form oForm = new Form();
oForm.Size = new Size (200, 150);
oForm.Controls.Add (oLabel);
oForm.Controls.Add (oComboBox);
// Run this form.
Application.Run (oForm);
}
static void comboBox_SelectionChangeCommitted (object sender,
EventArgs e)
{
MessageBox.Show ("SelectionChangeCommitted");
}
}
Nhấp vào phần văn bản của hộp tổ hợp và nhập "A". Bạn sẽ nhận được danh sách các đề xuất tự động điền. Nhấp vào một trong các lựa chọn bằng chuột của bạn. Sự kiện SelectionChangeCommitted
không xảy ra!
Chọn mục menu mà không sử dụng tự động hoàn thành. Bạn sẽ nhận được một hộp thông báo cho biết sự kiện SelectionChangeCommitted
đã xảy ra!
Do lựa chọn đã được người dùng thay đổi trong cả hai trường hợp, không nên SelectionChangeCommitted
được gọi trong cả hai trường hợp?
Sử dụng sự kiện SelectedIndexChanged
không phải là một tùy chọn, bởi vì đối với ứng dụng đằng sau ví dụ đóng hộp này, tôi chỉ muốn nó xảy ra khi người dùng thực hiện lựa chọn chứ không phải khi được đặt theo chương trình.
Tôi đã thử mã của bạn nhưng mọi thứ đều ổn. – spajce
Bất kỳ cơ hội nào [vấn đề này] (http://stackoverflow.com/questions/13291945/winforms-combobox-loses-autocomplete-value-on-lostfocus) có giúp ích gì không? – Guvante
@spajce: Tôi đã chạy mã nguồn ví dụ như được viết và sao chép hành vi được mô tả. Win 8, VS 2010, .NET 4 Hồ sơ khách hàng. Lưu ý rằng hành vi mong đợi là một cửa sổ bật lên khi chọn giá trị như một phần của quá trình tự động hoàn tất. – Guvante