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

将鼠标事件绑定到C#DataGridView中的特定对象,c#,events,datagridview,C#,Events,Datagridview,我在使用DataGridView进行一个c#项目时遇到了一个问题 基本上,我有一个网格,可以从任意多个位置更新,并有一个按钮列 我想捕捉按钮点击(当然)并做一些涉及该按钮行中其他单元格的事情。据我所知,将单击与网格行关联的唯一方法是通过EventArgs的RowIndex 我担心的是,网格可能会在用户单击和传递事件之间发生变化,导致错误的行看起来像是被单击的 这会发生吗?还是我太偏执了?如果可能,是否可以将引用绑定到eventargs中的按钮或行,以便即使其索引已更改,也可以区分原始行?WinF

我在使用DataGridView进行一个c#项目时遇到了一个问题

基本上,我有一个网格,可以从任意多个位置更新,并有一个按钮列

我想捕捉按钮点击(当然)并做一些涉及该按钮行中其他单元格的事情。据我所知,将单击与网格行关联的唯一方法是通过EventArgs的RowIndex

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


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

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

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

这意味着,即使存在并发更改,如果您的单击已注册,事件也不会因UI更新而中断

但是,请注意,后台线程可以在处理程序运行时或在单击发生和事件处理之间更改行绑定到的数据对象。不过,这对您来说没有什么区别,因为网格UI更新需要序列化,并且仍然会在事件处理程序之后发生