更改光标VB.NET

更改光标VB.NET,vb.net,button,event-handling,onclick,cursor,Vb.net,Button,Event Handling,Onclick,Cursor,当光标是ToolStripButton时,我无法更改它。单击事件 我有两个按钮叫“Rechercher” 编辑:只有按钮在工作。似乎ToolStripButton取消了我的光标。。。 谢谢你的帮助 Public Class FenetrePrincipale Private WithEvents _btnRechercher As New Windows.Forms.ToolStripButton("Rechercher") Private WithEvents btnRech

当光标是ToolStripButton时,我无法更改它。单击事件

我有两个按钮叫“Rechercher”

编辑:只有按钮在工作。似乎ToolStripButton取消了我的光标。。。 谢谢你的帮助

Public Class FenetrePrincipale

    Private WithEvents _btnRechercher As New Windows.Forms.ToolStripButton("Rechercher")
    Private WithEvents btnRechercherAccesBtn As New Button

    Private Sub Rechercher(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _btnRechercher.Click, btnRechercherAccesBtn.Click
        Try
            Me.Cursor = Cursors.WaitCursor
            'WAITING FOR THE CODE TO FINISH (2 sec)
        Finally
            Me.Cursor = Cursors.Default
        End Try
    End Sub
End Class

也许你应该尝试一些采样器,比如:

Private Sub MainFrame_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Search()
End Sub

Private Sub Search()
Try
  Me.Cursor = Cursors.WaitCursor
  UseWaitCursor = True
  Application.DoEvents()
  Threading.Thread.Sleep(1000) 'WAITING FOR THE CODE TO FINISH
Finally
   UseWaitCursor = False
   Me.Cursor = Cursors.Default
   Application.DoEvents()
End Try
End Sub

问题是,在代码应该执行的地方没有任何暂停,因此它的速度非常快。

这是我让它工作的唯一方法

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Function

Public Class FenetrePrincipale

    Private WithEvents _btnRechercher As New Windows.Forms.ToolStripButton("Rechercher")
    Private WithEvents btnRechercherAccesBtn As New Button

    Private Sub Rechercher(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRechercherAccesBtn.Click
        Try
            Me.Cursor = Cursors.WaitCursor
            'code...
        Finally
            Me.Cursor = Cursors.Default
        End Try
    End Sub

    Private Sub RechercherToolStripButton(ByVal sender As Object, ByVal e As System.EventArgs) Handles _btnRechercher.Click
        Me.UseWaitCursor = True
        SendMessage(Me.Handle, &H20, Me.Handle, New IntPtr(1))

        Rechercher(Nothing, Nothing)

        Me.UseWaitCursor = False
    End Sub
End Class
_
私有共享函数SendMessage(ByVal hWnd作为IntPtr,ByVal Msg作为UInteger,ByVal wParam作为IntPtr,ByVal lParam作为IntPtr)作为IntPtr
端函数
公共级非特雷普林
Private WithEvents_btnRechercher作为新的Windows.Forms.ToolStripButton(“Rechercher”)
Private with events btnRechercherAccesBtn As New按钮
Private Sub Rechercher(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理btnRechercherAccesBtn。单击
尝试
Me.Cursor=Cursors.WaitCursor
“代码。。。
最后
Me.Cursor=Cursors.Default
结束尝试
端接头
Private Sub RechercherToolStripButton(ByVal sender作为对象,ByVal e作为System.EventArgs)处理_btnRechercher.Click
Me.UseWaitCursor=True
SendMessage(Me.Handle,&H20,Me.Handle,新IntPtr(1))
Rechercher(没什么,没什么)
Me.UseWaitCursor=False
端接头
末级

这不是唯一的区别。AccessBtn正在运行过程之前设置光标。在您的过程中是否有
DoEvents
调用?也许您应该尝试在sub中使用MsgBox(“hello”)来测试事件处理程序(以测试当您单击某个事件时是否发生)。我不理解睡眠的使用。我要等一秒钟吗?不,但也许你的代码应该在“尝试”和“最终”之间完成,但完成得太快了,所以你看不到更改。要测试它是否工作,您可以使用sleep进行测试:)希望您理解我要说的内容。设置光标后,我将等待2秒钟,等待代码完成。当事件来自我的toolstripbutton时,我无法更改光标,但它可以工作。无论从何处单击,无论是按钮还是toolstrip,您总是在光标更改或任何视觉更改后调用Rechercher()或其他子位置Application.DoEvents(),它都可以工作。我设置Threading.Thread.Sleep(1000)只是为了测试,因为代码可能需要1秒才能完成。您可以尝试将其设置为5000,然后您将看到光标。