我有一个组合框。
如果用户进行了更改但未保存,并尝试从组合框中选择其他选项,则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;
}
}
}
答案 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;
}
}