2012-02-03 135 views
4

当ToolStripButton.click事件发生时,我无法更改光标。更改光标VB.NET

我有2个按钮叫“Rechercher”。

编辑:只有按钮正在工作。看来,ToolStripButton取消我的光标... THX的帮助

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 
+0

这不是唯一的区别。 AccessBtn在运行过程之前设置光标*。您的程序中是否有“DoEvents”呼叫? – LarsTech 2012-02-03 19:53:24

+0

也许你应该在你的sub中试用MsgBox(“hello”)来测试事件处理程序(以测试你是否点击某件事情时发生或不) – FeRtoll 2012-02-07 15:02:59

回答

3

这是我得到这个工作的唯一方法。

<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 
2

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

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 

问题是你没有任何停顿,其中代码应该执行,以便快速执行。

+0

我不理解睡眠的使用。我等一秒钟没用? – Naster 2012-02-06 15:48:40

+0

不,但是也许你的代码应该在try和finally之间做的太快,所以你不能看到改变。要测试它是否有效,你可以用睡眠测试:)希望你明白我想说的话。 – FeRtoll 2012-02-07 02:07:39

+0

设置光标时,我等待2秒钟完成代码。当事件来自我的工具栏按钮时,我不能改变光标,否则它会工作。 – Naster 2012-02-07 14:37:41