我的程序中有个datagridview 空间, 添加了
void dgvCharacteristics_EditingControlShowing(object sender, System.Windows.Forms.DataGridViewEditingControlShowingEventArgs e)
        {       ComboBox cBox = e.Control as ComboBox;
       if (cBox != null)
       {
          cBox.SelectedIndexChanged += new EventHandler(cBox_SelectedIndexChanged);
       }
}void cBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cBox = sender as ComboBox;
            if (cBox == null) return;            DataRowView dRowView = cBox.SelectedItem as DataRowView;
            if (dRowView == null) return;
            try
            {
                if (dRowView["FormulaName"].ToString() == "Expression")
                {
                    
                   
                    int index = this.dgvCharacteristics.CurrentCell.RowIndex;
                   CharacteristicCalSetupForm calForm = new CharacteristicCalSetupForm(dt, index);
                   calForm.showdilog(this);
                 }
             }
             catch{}
}程序能运行,但是现在有这样一种情况,就是我每次单击datagridview中的下拉列表框,cBox.SelectedIndexChanged += new EventHandler(cBox_SelectedIndexChanged); 这句代码都会执行,所有下拉列表框的选定索引改变事件就有很多处理程序,都指向cBox_SelectedIndexChanged 方法。所有就会重复弹出很多窗口,我只希望能弹出一个窗口,请问有什么方法可以实现。谢谢了!!

解决方案 »

  1.   

    if (cBox != null)
    {
        cBox.SelectedIndexChanged -= new EventHandler(cBox_SelectedIndexChanged);
        cBox.SelectedIndexChanged += new EventHandler(cBox_SelectedIndexChanged);
    }可以先注销掉,然后再添加。你试试看
      

  2.   

    在窗体加一个成员变量Hashtable m_comboBoxs = new Hashtable();
    代码修改一下if ( (cBox != null) && !m_comboBoxs.Contains(cBox))
    {
      m_comboBoxs.Add(cBox, true);
      cBox.SelectedIndexChanged += new EventHandler(cBox_SelectedIndexChanged); 
    }