如何在c#中取消组合框的值变化?

时间:2015-07-04 17:13:56

标签: c# winforms combobox

我有一个组合框。

如果用户进行了更改但未保存,并尝试从组合框中选择其他选项,则messageBox会警告他们并给他们机会

1取消(保持更改)

2否(放弃更改)

3是(保存chages)

例如:

组合框包含值

计算机

笔记本

电话

TV

相机

用户选择了"相机"然后将其改为" Camera78778" 然后用户从组合框

中选择了另一个值(例如"计算机")

messageBox警告他们并给他们机会

1取消(保持更改):combox是" Camera78778"

2否(丢弃更改):combox是"计算机"

3是(保存chages):combox是" Computer"但是这里的改变已经保存了。

我需要取消的代码。

我试过comboBox1.SelectedIndexChanged - = comboBox1._SelectedIndexChanged; 但没有解决方案。  我尝试了comboBox1_SelectionChangeCommitted但没有解决方案。

感谢先进。

更新

    int lastIndexcomboBox1 = -1;

    private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
    {
    Myfunction(comboBox1.SelectedIndex);
    }

    private void Myfunction(int comboBox1SelectedIndex)
    {

        if(comboBox1.Tag.ToString() == "not changed")
        {

        }
        else
        {
            DialogResult dr = MessageBox.Show("Do you want to save", "", MessageBoxButtons.YesNoCancel);
            if (dr == DialogResult.Yes)
            {

            }
            else if (dr == DialogResult.No)
            {

            }
            else if (dr == DialogResult.Cancel)
            {
                comboBox1.SelectedIndexChanged -= comboBox1_SelectedIndexChanged;
                comboBox1.SelectedIndex = lastIndexcomboBox1;
                comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
            }
        }

    }

1 个答案:

答案 0 :(得分:3)

您可以将有关当前所选索引的信息保存在私有变量中,并执行以下操作:

private int _comboBoxIndex = -1;
private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    var dialogResult = MessageBox.Show("Confirm your action", "Info", MessageBoxButtons.YesNoCancel);

    switch (dialogResult)
    {
        // Detach event just to avoid popping message box again
        case DialogResult.Cancel: 
            comboBox.SelectedIndexChanged -= comboBox_SelectedIndexChanged;
            comboBox.SelectedIndex = _comboBoxIndex;
            comboBox.SelectedIndexChanged += comboBox_SelectedIndexChanged;
            break;
        case DialogResult.No:
            // Do something
            _comboBoxIndex = comboBox.SelectedIndex;
            break;
        case DialogResult.Yes:
            // Do something
            _comboBoxIndex = comboBox.SelectedIndex;
            break;
    }
}