通过我的wpf项目,我使用以下代码更改鼠标光标:
Me.Dispatcher.Invoke(New SetCursorCallback(AddressOf SetCursor),New Object(){Cursors.Wait})
定义如下:
委托Sub SetCursorCallback(ByVal [CursorType] As System.Windows.Input.Cursor)
Private Sub SetCursor(ByVal [CursorType] As System.Windows.Input.Cursor) Me.Cursor = [CursorType] End Sub
在处理按键的子程序中,我检查按下的键是否为删除键,如果为true,我使用消息框提示用户确认他们要删除所选的条目。
删除所选条目的工作正常,但可能需要一些时间。
因此我打电话给
Me.Dispatcher.Invoke(New SetCursorCallback(AddressOf SetCursor),New Object(){Cursors.Wait})
在长时间运行的删除代码开始之前将光标更改为等待图标的代码,以及在长时间运行的代码完成时将值与Cursors.Arrow相同的代码。
但光标不会改变。
我在SetCursor例程中放置了一个console.writeline来确认它是否正在执行,它是(当光标被调用为等待时再次变为等待时)。< / p>
如果从等式中删除消息框提示,则光标会按预期更改。光标改变了。我无法理解为什么消息框会阻止光标更改。
以下是带有消息框的代码:
如果MessageBox.Show(“您要删除所选条目吗?”, “我的程序名称 - 删除”,MessageBoxButton.YesNo, MessageBoxImage.Question)= MessageBoxResult.Yes然后
Me.Dispatcher.Invoke(New SetCursorCallback(AddressOf SetCursor), New Object() {Cursors.Wait}) ... some code ... End If
我还尝试在消息框的if语句中设置一个标志,并在消息框的if语句中更改光标。它不起作用,在subrountine中运行消息框似乎停止了对光标的更改。
我还在msgbox if语句中尝试了me.focus命令,但无济于事。
我还尝试将me.cursor语句更改为xxx.cursor,其中xxx在窗口加载时全局设置为“Me”。
我也尝试过使用winform msgbox语句。
似乎唯一允许光标更改代码工作的是不通过消息框提示。
我正在使用VS 2015社区版。
此时我没有想法,任何帮助都会非常感激。
答案 0 :(得分:0)
好的 - 所以它不漂亮但是为了解决这个问题,当用户点击消息框的“确定”按钮到wpf的窗口列表框的中心时,我最终从屏幕上的任何地方跳过鼠标指针。
现在鼠标指针位于wpf窗口列表框上,然后我将图标更改为等待符号并运行长时间运行的代码。
这很有效 - 显示期待的等待图标 - 唯一的问题是用户必须在视觉上寻找他们的鼠标指针移动到的位置(这是两个邪恶中较小的一个 - 更大的邪恶是一个不变的鼠标图标当调用等待鼠标指针时。)
以下是我用来跳过鼠标光标的代码:
Dim MyCursor = New Forms.Cursor(Forms.Cursor.Current.Handle)
MyCursor.Position = New System.Drawing.Point(Me.Left + MyListView.Margin.Left + MyListView.ActualWidth / 2,Me.Top + MyListView.Margin.Top + MyListView.ActualHeight / 2)