Я нашел несколько приемлемое решение, хотя и не соответствующее непосредственно дословному вопросу задаваемого вопроса.
Одним из возможных решений, хотя, к сожалению, по какой-то причине, удаленным его подсказчиком, было использование фильтров сообщений.Это, однако, привело к пути ручного расчета того, куда шел щелчок мыши, и, по существу, замены возможностей winforms преобразования событий мыши в процесс изменения выбранного элемента в выпадающем списке поля со списком с некоторыми грубыми костылями самостоятельно.Это путь, от которого я уклонился.
В конце я остановился на «косметическом» решении, идея которого заключалась в замене отображаемого текста в поле со списком на время принятия пользователем решения на предмет того, является ли или нетне отменять изменения.
Итак, в событие SelectedIndexChanged я поместил следующий код:
try
{
if (MyDataSets.Current.HasChanges() && !MyDataSets.Current.Name.Equals(cbChosenDataSet.Value))
{
cbChosenDataSet.DropDownStyle = ComboBoxStyle.DropDown;
cbChosenDataSet.Text = MyDataSets.Current.Name + ' ';
Application.DoEvents();
}
else return;
/*
* UserChoseToCancel is set according to user's choice
*/
if (UserChoseToCancel)
cbChosenDataSet.Value = MyDataSets.Current.Name;
else
MyDataSets.SetCurrent(cbChosenDataSet.Value);
/*
* other things
*/
}
catch(Exception e) {/* handling */}
finally
{
cbChosenDataSet.DropDownStyle = ComboBoxStyle.DropDownList;
}
Суть идеи такова: в стиле DropDown текст ComboBox 'может бытьизменилось по мере необходимости.Однако при установке одного из элементов в списке произойдет изменение выбора.Чтобы избежать этого без необходимости, к временному тексту добавляется пробел.
Если отмена не происходит, восстановление стиля в DropDownList заставляет текст изменить на фактическое выбранное значение (которое осталось прежним).
В случае, если пользователь отменяет изменениезначение поля со списком возвращается к старому.Проверка в начале обработчика останавливает генерируемое этим событием дальнейшую обработку.