问题现象:
创建了一个多行的datagridview,当点击单行时,在OnClick事件中注册了绘图相关的回调
发现如果点击A行,快速滑动到B,C,D行,此时均会出现BCD行被选中的效果
如果点击A行,过一会鼠标再滑动到BCD,则不会有复选中问题
实际原因:
通过debug发现,实际应该是绘图结束之前,去进行滑动,则会出现复选中现象。
log显示,绘图大概会耗时 800~1200毫秒,这期间鼠标的按键事件没有走完,则仍会认为鼠标状态处在未释放--猜测至少为非mouseUp状态
这种情况下滑动至其他行,则等同于按住鼠标滑动,因此出现了多行选中问题现象
解决方案:
实际是按键事件的处理阻塞了鼠标状态的及时更新,因此对耗时的UI刷新操作采用了BeginInvoke方法的包裹,避免其更新主线程状态
文章讲述了在DataGridView中,由于绘图操作耗时(约800-1200毫秒),可能导致点击后快速滑动时出现多行选中的问题。解决方法是通过BeginInvoke包裹耗时UI刷新,确保鼠标状态及时更新,防止按键事件阻塞。

被折叠的 条评论
为什么被折叠?



