2012-09-24 68 views
0

我正在使用DataGridView处理c#项目并遇到问题。将鼠标事件绑定到C#中的特定对象DataGridView

基本上,我有一个从任意位置更新并具有按钮列的网格。

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

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

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

回答

1

WinForms中的GUI控件绑定到UI线程。

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

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

但是,请注意,后台线程可能会在您的处理程序运行时或在发生点击和处理事件之间更改绑定行的数据对象。尽管如此,它对你来说没有任何意义,因为网格UI更新需要被序列化,并且在你的事件处理器之后仍然会发生。