Oto krótki program, który odtwarza problem, który właśnie napotkałem. Zostało to skompilowane pod MS Windows 7 z .NET 4.0, na wszelki wypadek, który robi różnicę.Zdarzenie ComboBox SelectionChangeCommitted nie działa z funkcją Autouzupełnianie
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");
}
}
Kliknij tekstową część pola kombi i wpisz "A". Otrzymasz listę sugestii autouzupełniania. Kliknij jedną z opcji myszką. Zdarzenie SelectionChangeCommitted
się nie stało!
Wybierz element menu bez korzystania z funkcji autouzupełniania. Otrzymasz komunikat z informacją o zdarzeniu SelectionChangeCommitted
!
Biorąc pod uwagę, że wybór został zmieniony przez użytkownika w obu przypadkach, czy w obu przypadkach nie należy wywoływać numeru SelectionChangeCommitted
?
Użycie zdarzenia nie jest opcją, ponieważ w przypadku aplikacji znajdującej się za tym przykładem w puszkach chcę, aby miało to miejsce tylko wtedy, gdy użytkownik dokona wyboru, a nie gdy zostanie ustawione programowo.
Wypróbowałem twój kod, ale wszystko było w porządku. – spajce
Dowolna szansa [ten numer] (http://stackoverflow.com/questions/13291945/winforms-combobox-loses-autocomplete-value-on-lostfocus) w ogóle pomaga? – Guvante
@spajce: Uruchomiłem przykładowy kod źródłowy tak, jak napisałem i powieliłem opisane zachowanie. Win 8, VS 2010, .NET 4 Client Profile. Zwróć uwagę, że oczekiwane zachowanie pojawia się podczas wybierania wartości jako części automatycznego uzupełniania. – Guvante