ОК, вот что я придумала. Hack? Может быть, но эй, это работает. Я просто заполнил поле со списком дней недели (эй, мне что-то нужно), а затем обработал событие нажатия клавиши. При каждом нажатии клавиши я проверяю, совпадает ли это слово с началом любого слова в AutoCompleteSourceCollection. Если этого не произойдет, я установлю для e.Handled значение true, чтобы ключ не регистрировался.
public Form5()
{
InitializeComponent();
foreach (var e in Enum.GetValues(typeof(DayOfWeek)))
{
this.comboBox1.AutoCompleteCustomSource.Add(e.ToString());
}
this.comboBox1.KeyPress += new KeyPressEventHandler(comboBox1_KeyPress);
}
private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
string text = this.comboBox1.Text + e.KeyChar;
e.Handled = !(this.comboBox1.AutoCompleteCustomSource.Cast<string>()
.Any(s => s.ToUpperInvariant().StartsWith(text.ToUpperInvariant()))) && !char.IsControl(e.KeyChar);
}
РЕДАКТИРОВАТЬ: Если вы используете .Net 3.5, вам нужно ссылаться на System.Linq. Если вы используете .NET 2.0, используйте это вместо:
private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
string text = this.comboBox1.Text + e.KeyChar;
foreach (string s in this.comboBox1.AutoCompleteCustomSource)
{
if (s.ToUpperInvariant().StartsWith(text.ToUpperInvariant()))
{
return;
}
}
e.Handled = true;
}