Как предотвратить/отменить изменение значения поля комбинированного списка в c#?

22
задан Jim Fell 5 July 2016 в 14:27
поделиться

6 ответов

Сохраните текущее значение на Enter событие. Реализуйте BeforeValueChange логика в ValueChanged событие перед фактическим ValueChanged логика. Если пользователь отменяет, установил хранимую сумму и не продолжает в методе (return).

, Если бы Вы собираетесь использовать эту систему много, я предложил бы наследовать ComboBox и реализовать Ваш BeforeValuechange событие там.

3
ответ дан Vincent Van Den Berghe 29 November 2019 в 05:26
поделиться

Событие Validating может использоваться для этого сценария
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validating.aspx

2
ответ дан Aleris 29 November 2019 в 05:26
поделиться

Вы не получаете соответствующее событие по умолчанию. Вы могли кэшировать предыдущее значение и задержать его к этому, если пользователь хочет отменить.

1
ответ дан Daniel M 29 November 2019 в 05:26
поделиться

Как насчет того, чтобы использовать события Validating / Validated?
Это работает хорошо, если событие, происходящее на LostFocus вместо Изменения, соглашается с Вами.

Иначе, как насчет

public void Combobox_ValueChanged(object sender, EventArgs e) {
    if (!AskUserIfHeIsSureHeWantsToChangeTheValue())
    {
        // Set previous value
        return;
    }

    // perform rest of onChange code
}
1
ответ дан configurator 29 November 2019 в 05:26
поделиться

Вы могли использовать фильтр сообщения для прерывания щелчков и нажатий клавиш, которые позволят Вам предотвращать нормальное поведение поля комбинированного списка. Но я думаю, что Вы были бы более обеспеченным отключением поля комбинированного списка, когда пользователь вносит изменение, и потребуйте, чтобы они или сохранили или вернулись свои изменения.

0
ответ дан Simon 29 November 2019 в 05:26
поделиться

Сохраните 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;
    }
}
16
ответ дан 29 November 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: