我有一个DataGridView和EditingControlShowing事件的处理程序,用于为某些列添加或删除keyUp事件的处理程序。问题有时是一个没有相关KeyUp处理程序的列实际上触发了处理程序。看起来网格不知道哪个列应该触发哪个处理程序。
问题:当我输入column2(而不是column1)时,删除KeyUp处理程序的行运行到目前为止一直很好。但是然后Control_KeyUp运行了! Control_KeyUp仅适用于Column1。
有没有办法找出列(或单元格?)是否附加了处理程序?
private void MyGrid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
string columnName = MyGrid.Columns[MyGrid.CurrentCell.ColumnIndex].Name;
if (columnName == "column1")
e.Control.KeyPress += new KeyPressEventHandler(Control_KeyUp);
else
e.Control.KeyPress -= new KeyPressEventHandler(Control_KeyUp);
......
}
答案 0 :(得分:1)
以下是您可能会觉得有用的类似问题:
EditingControlShowing events firing multiple times
来自MSDN:
将事件处理程序附加到 因此,您必须编辑控件 采取预防措施,以避免附着 多次使用相同的处理程序。至 避免这个问题,删除处理程序 在你附上之前的事件 事件的处理程序。这将 如果处理程序是,防止重复 已经附在活动上,但是 否则将无效。
希望其中一些有用。