我的Windows Forms应用程序中有一个DataGridView控件。我正在使用后台线程向网格添加行。当流程开始时,我将表单的光标更改为Waitcursor,当流程结束时,又将其更改回默认状态。这适用于表单,但不适用于网格。当窗体的光标更改回默认值时,网格的光标不会更改,尽管光标位于窗体其余部分上时会更改。
这与我从后台线程更新网格的事实有关吗?(直接从UI线程更改光标)。
编辑:后台进程引发一个事件,处理程序检查网格的InvokeRequired属性,并决定是否需要从主线程再次“调用”该方法。因此,实际的UI更新实际上是从适当的线程进行的。我不确定这是否意味着我在“使用后台线程”。:
发布于 2011-01-03 21:14:53
我在执行数据网格的单线程更新时遇到了一些问题,在我将waitcursor设置为true之后,datagrid没有重置为正常的游标。我所做的就是在我去
this.UseWaitCursor = false;我添加了
DatagridviewFoo.Cursor = this.Cursor;也许对你来说也是同样的问题
发布于 2012-09-20 04:03:09
我也遇到过这个问题。很难找到原因,更不用说解决方案了。
只有当我在DGV控件上有一个对话框,并且鼠标单击按钮关闭框时,才会发生此问题,这样当框关闭时,鼠标位于(可调整大小的)列边框上。如果光标停留在单元格上,则不会出现问题。如果我必须猜测,我会说在对话框关闭时网格立即看到了一个列调整大小事件,该事件没有得到适当的处理。
使用Cursor.Current = Cursors.Default修复了我的问题(不需要显式地重置控件的光标)。但请注意,即使在显式控制游标重置的情况下,Application.UseWaitCursor = False也无法工作。
发布于 2012-12-11 04:14:18
我也有类似的问题,但上面的两个解决方案对我都不起作用。我的问题不是由单击可移动的列分隔符上方的按钮引起的。它只是在打开和关闭对话框后随机发生的。我非常确定这归结于时间问题,因为.Net/Windows在设置游标并实际使其生效时存在问题。为了克服这个问题,我们用来显示和隐藏等待游标的库调用- ack!- Application.DoEvents。我在OnCursorChanged中设置了一个断点,发现光标有时实际上是在后面对Application.DoEvents的调用上设置的(用于在等待文件系统释放文件上的写锁定时保持UI响应)。因此,我猜有时在设置等待游标的调用完全生效之前,默认游标就会重新打开。无论如何,我的暴力方法是调用
Cursor = Cursors.Default;在我的OnCellEnter覆盖中(这总是在关闭对话框后刷新网格之后发生)。我对此并不特别自豪,但它似乎是有效的。
https://stackoverflow.com/questions/3008958
复制相似问题