日期:2014-05-18  浏览次数:21624 次

怎样撤销ComboBox的选择?
就是说,当用户在选择某一项后,会弹出一个对话框,若对话框取消的话,ComboBox回到原来的选择.
我搜索到的方案几乎都是用变量记录当前选择,对话框取消的话就
C# code

if (MessageBox.Show("?", "", MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.Cancel)
{
    this.comboBox1.SelectedIndex = miCurSel;
}



问题来了,这个撤销动作会再次触发“SelectedIndexChanged”,这不是我想要的。。。
ComboBox 这玩意没实现类似 BeforeIndexChanged 或 SelectedIndexChanging 的事件...
我试过继承 ComboBox,但搞不定。。。

各位英雄可有良策?


------解决方案--------------------
一个简单的方法可以解决这个问题,设置一个bool型变量,表示忽略SelectedIndexChanged事件,假设是bool m_bIgnoreSelectedIndexChanged=false,然后在你的

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (m_bIgnoreSelectedIndexChanged)
return;//直接什么都不做,
miCurSel = comboBox1.SelectedIndex;
}

然后在

if (MessageBox.Show("?", "", MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.Cancel)
{
m_bIgnoreSelectedIndexChanged=true;
this.comboBox1.SelectedIndex = miCurSel;
m_bIgnoreSelectedIndexChanged=false;
}