消息框阻止游标在WPF代码中更改

时间:2015-09-30 23:47:17

标签: .net wpf vb.net

通过我的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社区版。

此时我没有想法,任何帮助都会非常感激。

1 个答案:

答案 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)