我的程序中有个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 方法。所有就会重复弹出很多窗口,我只希望能弹出一个窗口,请问有什么方法可以实现。谢谢了!!
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 方法。所有就会重复弹出很多窗口,我只希望能弹出一个窗口,请问有什么方法可以实现。谢谢了!!
{
cBox.SelectedIndexChanged -= new EventHandler(cBox_SelectedIndexChanged);
cBox.SelectedIndexChanged += new EventHandler(cBox_SelectedIndexChanged);
}可以先注销掉,然后再添加。你试试看
代码修改一下if ( (cBox != null) && !m_comboBoxs.Contains(cBox))
{
m_comboBoxs.Add(cBox, true);
cBox.SelectedIndexChanged += new EventHandler(cBox_SelectedIndexChanged);
}