重用datagridview(注销事件)
本文关键字:事件 注销 datagridview 重用 | 更新日期: 2023-09-27 18:20:26
在我正在进行的一个项目中,我在将事件处理程序重置为数据网格视图时遇到了一些问题。
我有许多数据网格视图,其中填充了连接到串行端口的测试设备的值。测试会话完成后,我想为新会话重置数据网格视图。
我的问题是,我在创建的每个单元格上都注册了单元格点击事件,当我清除数据网格视图时,该事件会持续存在。
我正在以编程方式设置数据网格视图中的值
以下是我如何添加cellclick事件:
for (int i = 0 ; i < dgList.Count ; i++) //dgList is list of datagridviews
{
int numberForEvent = i; //i is datagrid nr i
dgList[i].CellClick += ((sender, e) =>
{
alterValueClick(numberForEvent, e.RowIndex);
});
}
当我第一次使用我的程序时,它工作得很好,但如果我为新的测试会话重置数据网格,事件就会注册两次,以此类推
有人对如何清除事件有什么想法吗?或者我的设计走错了路吗?
通过重置,我的意思是在数据网格上迭代,并使用.rows.clear和.columns.clear
清除行和列不会取消注册事件。你有两个选项
- either re-initialize DataGrid and re-register the event
- un-register previous event and re-register new one.
顺便问一下,你为什么需要重置事件?为什么不使用已经注册的事件?
编辑
我认为你不能因为声明点击事件的方式而在这里取消注册。这是一个匿名方法,不会像这个那样取消注册
尝试为事件处理程序分配一个可靠的方法,它应该可以在中工作
//for registering
dgList[i].CellClick += new DataGridViewCellEventHandler(YourMethod);
//for unregistering
dgList[i].CellClick -= new DataGridViewCellEventHandler(YourMethod);
然后,就像在for循环中注册一样,运行一个for循环来取消注册。