Сохраните текущее значение на Enter
событие. Реализуйте BeforeValueChange
логика в ValueChanged
событие перед фактическим ValueChanged
логика. Если пользователь отменяет, установил хранимую сумму и не продолжает в методе (return
).
, Если бы Вы собираетесь использовать эту систему много, я предложил бы наследовать ComboBox и реализовать Ваш BeforeValuechange
событие там.
Событие Validating может использоваться для этого сценария
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validating.aspx
Вы не получаете соответствующее событие по умолчанию. Вы могли кэшировать предыдущее значение и задержать его к этому, если пользователь хочет отменить.
Как насчет того, чтобы использовать события Validating / Validated?
Это работает хорошо, если событие, происходящее на LostFocus вместо Изменения, соглашается с Вами.
Иначе, как насчет
public void Combobox_ValueChanged(object sender, EventArgs e) {
if (!AskUserIfHeIsSureHeWantsToChangeTheValue())
{
// Set previous value
return;
}
// perform rest of onChange code
}
Вы могли использовать фильтр сообщения для прерывания щелчков и нажатий клавиш, которые позволят Вам предотвращать нормальное поведение поля комбинированного списка. Но я думаю, что Вы были бы более обеспеченным отключением поля комбинированного списка, когда пользователь вносит изменение, и потребуйте, чтобы они или сохранили или вернулись свои изменения.
Сохраните SelectedIndex ComboBox, когда вставлять в бокс, если сначала введено, а затем восстановить его значение, когда вам нужно отменить изменение.
cbx_Example.Enter += cbx_Example_Enter;
cbx_Example.SelectionChangeCommitted += cbx_Example_SelectionChangeCommitted;
...
private int prevExampleIndex = 0;
private void cbx_Example_Enter(object sender, EventArgs e)
{
prevExampleIndex = cbx_Example.SelectedIndex;
}
private void cbx_Example_SelectionChangeCommitted(object sender, EventArgs e)
{
// some custom flag to determine Edit mode
if (mode == FormModes.EDIT)
{
cbx_Example.SelectedIndex = prevExampleIndex;
}
}