2012-09-24 69 views
0

我正在使用DataGridView處理c#項目並遇到問題。將鼠標事件綁定到C#中的特定對象DataGridView

基本上,我有一個從任意位置更新並具有按鈕列的網格。

我想捕獲按鈕點擊(當然),並做一些涉及該按鈕的行其他單元格的東西。據我所知,將點擊與一行網格相關聯的唯一方法是通過EventArgs的RowIndex。

我擔心的是網格可能會在用戶單擊和傳遞事件之間發生變化,從而導致不正確的行看起來像點擊一樣。

這可能發生還是我偏執?如果可能的話,我是否可以將引用綁定到按鈕或eventargs中的行,以便我可以區分始發行,即使其索引已經改變了?

回答

1

WinForms中的GUI控件綁定到UI線程。

當您單擊該行時,網格實現將處理此操作,並且作爲單擊處理的一部分引發事件 - 全部在同一UI線程上。即使其他線程更改了網格內容,也必須將其序列化到UI線程(通常在後臺發佈Windows消息,或WinForms術語中的BeginInvoke - 不完全相同但接近)。

這意味着即使有併發更改,如果您的點擊已被註冊,該事件將不會被UI更新中斷。

但是,請注意,後臺線程可能會在您的處理程序運行時或在發生點擊和處理事件之間更改綁定行的數據對象。儘管如此,它對你來說沒有任何意義,因爲網格UI更新需要被序列化,並且在你的事件處理器之後仍然會發生。