У меня была похожая проблема, в которой я установил все свои поля со списком на «автозаполнение», используя
ComboBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
ComboBox.AutoCompleteSource = AutoCompleteSource.ListItems;
Я перебрал и установил все их события lostFocus:
foreach(Control control in this.Controls)
{
if(control is ComboBox)
{
((ComboBox)control).LostFocus += ComboBox_LostFocus;
}
}
и имел объект словаря для хранения старых значений
public Dictionary<string, int> comboBoxOldValues = new Dictionary<string, int>();
затем, наконец, убедитесь, что значение существует или установлено в старый индекс, затем сохраните в словарь
private void ComboBox_LostFocus(object sender, EventArgs e)
{
ComboBox comboBox = (ComboBox)sender;
if (comboBox.DataSource is List<YourDataType>)
{
if (((List<YourDataType>)comboBox.DataSource).Count(x => x.YourValueMember == (YourValueMemberType)comboBox.SelectedValue) == 0)
{
if (comboBoxOldValues.Keys.Count(x => x == comboBox.Name) > 0)
{
comboBox.SelectedIndex = comboBoxOldValues[comboBox.Name];
}
else
comboBox.SelectedIndex = -1;
}
}
if (comboBoxOldValues.Keys.Count(x => x == comboBox.Name) > 0)
{
comboBoxOldValues[comboBox.Name] = comboBox.SelectedIndex;
}
else
comboBoxOldValues.Add(comboBox.Name, comboBox.SelectedIndex);
if (comboBox.SelectedIndex == -1)
comboBox.Text = string.Empty;
}