将鼠标事件绑定到C#DataGridView中的特定对象

时间:2012-09-24 18:34:11

标签: c# events datagridview

我正在使用DataGridView处理一个c#项目并遇到了一个问题。

基本上,我有一个网格,可以从任意数量的地方更新,并有一个按钮列。

我想捕获按钮点击(当然)并执行涉及该按钮行的其他单元格的操作。据我所知,将点击与一行网格相关联的唯一方法是通过EventArgs的RowIndex。

我担心的是网格可能会在用户点击和正在传递的事件之间发生变化,从而导致错误的行看起来像被点击一样。

这可能发生,还是我是偏执狂?如果可能的话,我是否可以绑定对eventargs中的按钮或行的引用,以便即使其索引已经更改,我也可以区分原始行?

1 个答案:

答案 0 :(得分:1)

WinForms中的GUI控件与UI线程“绑定”。

当您单击该行时,网格实现会处理此行,并且作为点击处理的一部分会引发一个事件 - 所有这些都在同一个UI线程上。即使其他线程更改了网格内容,也必须将其序列化为UI线程(通常在后台发布Windows消息,或者在WinForms术语中使用BeginInvoke - 不完全相同,但接近)。

这意味着即使存在并发更改,如果您的点击已经注册,该事件也不会被UI更新中断。

但是,请注意,后台线程可以在处理程序运行时更改行绑定的数据对象,或者在发生单击和处理事件之间更改。但是,它对您没有任何影响,因为网格UI更新需要序列化,并且仍然会在事件处理程序之后发生。