【问题标题】:Bind mouse event to a specific object in C# DataGridView将鼠标事件绑定到 C# DataGridView 中的特定对象
【发布时间】:2023-04-03 13:55:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# events datagridview


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2013-05-28
      • 2011-08-13
      • 2020-08-03
      • 2012-10-18
      • 1970-01-01
      • 2014-08-18
      相关资源
      最近更新 更多